繁体   English   中英

带有二维数组的 Java 流

[英]Java streams with 2d Array

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

我试图流过一个二维数组,并将前一行中元素的总和添加到下一行中的每个元素。

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

有没有办法在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-

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM