首页 > 解决方案 > 带有二维数组的 Java 流

问题描述

下午好,我最近在我的 Java 课上了解了 Steam,并想扩展我的知识。

我正在尝试通过二维数组进行流式传输,并将前一行中的元素之和添加到下一行中的每个元素中。

我也想让这个流并行,但这会带来一个问题,因为如果流在第一行完成之前开始在第二行上工作,那么数据完整性将是有问题的。

无论如何在java中可以做到这一点?

标签: java

解决方案


如果我对您的理解正确,那么这种和平的代码可以满足您的要求:

    int[][] matrix = new int[][]{{1,2,3},{3,2,1},{1,2,3}};
    BiConsumer<int[], int[]> intArraysConsumer = (ints, ints2) -> {
        for (int i = 0; i < ints.length; i++) {
            ints[i] = ints[i] + ints2[i];
        }
    } ;
    int[] collect = Arrays.stream(matrix).collect(() -> new int[matrix[0].length], intArraysConsumer, intArraysConsumer);
    System.out.println(Arrays.toString(collect));

这输出:[5,6,7]

根据我对流 api 的理解,它将决定是否并行运行,这就是为什么你需要提供一个你需要开始为空的对象的创建者,一种在其上累积的方法,以及一种组合两个部分的方法积累对象。对于这种特殊情况,累积和组合操作是相同的。

请参考:https ://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#collect-java.util.function.Supplier-java.util.function.BiConsumer- java.util.function.BiConsumer-


推荐阅读