[英]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.