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]);
}
添加回答
举报