3 回答

TA貢獻1783條經驗 獲得超4個贊
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 的流。指數。mapToObj
轉換為 aStream<Pair<Integer, Integer>>
,其中對鍵是索引,對值是times[index]
。reduce
將以初始對(-1,Integer.MAX_VALUE)作為結果開始,然后對于流中的每一對是否可以找到更好的最小值。
請注意,您可以只使用一對名稱和時間 ( Pair<String, Integer>
);不需要索引。
這里可能過于高級和具體,但它非常具有表現力和干凈(使用步驟而不需要局部變量)。

TA貢獻1810條經驗 獲得超4個贊
您可以將變量設置為元素的索引,而不僅僅是獲取該元素的值;
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]);
}
添加回答
舉報