这是一些网站的简单任务。
如果 a[i] > b[i],则 Alice 获得 1 分。如果 a[i] < b[i],则 Bob 获得 1 分。 如果 a[i] = b[i],那么两个人都得不到分数。 返回:Alice的分数在第一位,Bob的分数在第二位。
我可以使用流编写这段代码吗?
public static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
int alice = 0;
int bob = 0;
for (int i = 0; i < a.size(); i++) {
if (a.get(i) > b.get(i))
alice++;
else if (a.get(i) < b.get(i))
bob++;
}
return Arrays.asList(alice, bob);
}
...
经过一番思考,我写下了这段代码:
public static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
Integer[] result = {0, 0};
IntStream.range(0, Math.min(a.size(), b.size()))
.map(i -> a.get(i).compareTo(b.get(i)))
.forEach(i -> {
if (i > 0) result[0]++;
else if (i < 0) result[1]++;
});
return Arrays.asList(result);
}
但是这段代码并没有简洁多少。 有没有办法让代码更漂亮?
最佳答案
您可以使用 filter
和 count
使代码更短,但在这里使用循环更简洁。 Stream
并不总是解决方案。
return Arrays.asList(
IntStream.range(0, Math.min(a.size(), b.size())).filter(i -> a.get(i) > b.get(i)).count(),
IntStream.range(0, Math.min(a.size(), b.size())).filter(i -> a.get(i) < b.get(i)).count()
);
关于java - 我如何使用 Stream Java 8 按元素比较两个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74868895/