java - 带有二维数组的 Java 流
问题描述
下午好,我最近在我的 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 的理解,它将决定是否并行运行,这就是为什么你需要提供一个你需要开始为空的对象的创建者,一种在其上累积的方法,以及一种组合两个部分的方法积累对象。对于这种特殊情况,累积和组合操作是相同的。
推荐阅读
- android - Android - 与移动应用程序的服务器通信
- javascript - 何时/如何格式化十进制数据类型 ASP.NET 返回 JSON 以供在数据表 js 中使用
- jmeter - Jmeter - Distributed test - How to distribute users to multiple slaves
- c# - how do save cookies with restclient
- mysql - 使用 Java 的 JSON MySQL 数据库
- swift - 使用 swift 和 spritekit,你如何阻止场景在变得活跃/移动到前台后取消暂停?
- ms-access - How to generate phone number extensions in MS access VBA
- airflow - Storing execution parameters in the Airflow database
- mysql - 获取Mysql中的最新信息
- regex - 谷歌表格正则提取