3 回答

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
public static void lowesttime(String[] names, int[] times) {
Pair<Integer, Integer> min = IntStream.range(0, times.length)
.mapToObj(i -> new Pair<Integer, Integer>(i, times[i]))
.reduce(new Pair<>(-1, Integer.MAX_VALUE), (r, p) ->
r.getKey() == -1 || r.getValue() > p.getValue() ? p : r);
String minName = p.getKey() == -1 ? "nobody" : names[p.getKey()];
System.out.printf("Found minimum for %s at index %d, value %d%n",
minName, min.getKey(), min.getValue());
}
我想使用 Stream 來展示:
IntStream.range(0, N)
將給出 0, 1, 2, ..., N-1 的流。指數(shù)。mapToObj
轉(zhuǎn)換為 aStream<Pair<Integer, Integer>>
,其中對(duì)鍵是索引,對(duì)值是times[index]
。reduce
將以初始對(duì)(-1,Integer.MAX_VALUE)作為結(jié)果開始,然后對(duì)于流中的每一對(duì)是否可以找到更好的最小值。
請(qǐng)注意,您可以只使用一對(duì)名稱和時(shí)間 ( Pair<String, Integer>
);不需要索引。
這里可能過于高級(jí)和具體,但它非常具有表現(xiàn)力和干凈(使用步驟而不需要局部變量)。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以將變量設(shè)置為元素的索引,而不僅僅是獲取該元素的值;
public static void lowesttime(String[] names, int[] times) {
int lowest;
int lowestIndex = 0;
lowest = times[0];
for (int i = 1; i < times.length; i++) {
if (times[i] < lowest) {
lowest = times[i];
lowestIndex = i;
}
}
System.out.println(lowest);
System.out.println(lowestIndex);
// to access arrays names[?], times[?}
// System.out.println(names[lowest] + ": " + times[lowest]);
}

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
如果您已經(jīng)知道最低值,則可以使用:
java.util.Arrays.asList(theArray).indexOf(lowestValue)
添加回答
舉報(bào)