java - 我如何使用 Stream Java 8 按元素比较两个列表?

标签 java list java-stream compare

这是一些网站的简单任务。

如果 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);
}

但是这段代码并没有简洁多少。 有没有办法让代码更漂亮?

最佳答案

您可以使用 filtercount 使代码更短,但在这里使用循环更简洁。 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/

相关文章:

java - 如何使用流连接两个双数组

java - 负载测试 HTTP 服务

java - 执行 java.io.File 或 FileInputStream 时如何引用 OSGi 包中包含的文件

java - JSch:即使主机 key 指纹存在于 known_hosts 文件中,也会发生 UnknownHostKey 异常

html - Bootstrap : div inside li

python数组符号简写:"k%parents.shape[0]"是什么意思?

java - map 中特定键的值总和

java - 什么时候必须关闭数据库?

python - 获取索引数组,在另一个数组中找到匹配的索引并替换值

java - 如何获得Java 8中两个Stream之间的对称差异?