我在java中创建了一个二维整数数组,它打印下面的内容
1122, 10, 20
3344, 20, 30
1122, 20, 20
1122, 10, 10
3344, 10, 40
我现在尝试迭代上面的内容并创建一个新的二维数组。我想按第一列进行分组,并对与第一列中的数字关联的其他整数值求和,最终得到如下结果数组:
1122, 40, 50
3344, 30, 70
实现这一目标的最佳方法是什么?
------ 编辑 ------
使用下面的第二个答案,我已经能够生成一个嵌套列表,如下所示:
[1122, 40, 50]
[3344, 30, 70]
是否可以直接以二维整数数组形式获取结果,以便我可以使用和操作而不是嵌套列表?
我尝试使用下面的代码转换嵌套列表,但无法成功编译。
int[][] collectarray = new int[collect.size()][];
for (int i = 0; i < collectarray.length; i++) {
collectarray[i] = new int[collect.get(i).size()];
}
for (int i = 0; i < collect.size(); i++) {
for (int j = 0; j < collect.get(i).size(); j++) {
collectarray[i][j] = collect.get(i).get(j);
}
}
最佳答案
这是使用流 API 的解决方案:
List<int[]> collect = Arrays.stream(arr)
.collect(Collectors.groupingBy(ints -> ints[0]))
.entrySet().stream()
.map(entry -> new int[]{
entry.getKey(), // [0]
entry.getValue().stream().mapToInt(value -> value[1]).sum(), // [1]
entry.getValue().stream().mapToInt(value -> value[2]).sum() // [2]
})
.collect(Collectors.toList());
并打印结果
collect.forEach(ints -> System.out.println(Arrays.toString(ints)));
更新
如果你想直接获取二维数组的结果,你可以使用toArray()
而不是.collect(Collectors.toList());
int[][] collect = Arrays.stream(arr)
...
...
.toArray(int[][]::new);
关于java - 对 2D Java 数组中的整数值进行分组以及相关值的求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54598370/