Den*_*nis 2 java compare list java-stream
这是某个网站上的一个简单任务。
如果 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);
}
Run Code Online (Sandbox Code Playgroud)
...
经过一番思考,我写了这段代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
但这段代码并没有简洁多少。有没有办法让代码变得更漂亮?
filter您可以使用and使代码更短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()
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |