将2D Java数组中的整数值和与之和相关的值分组

将2D Java数组中的整数值和与之和相关的值分组,java,arrays,multidimensional-array,integer,Java,Arrays,Multidimensional Array,Integer,我已经用java创建了一个2D整数数组,它打印了下面的 1122, 10, 20 3344, 20, 30 1122, 20, 20 1122, 10, 10 3344, 10, 40 我现在尝试迭代上述内容并创建一个新的2D数组。我想按第一列进行分组,并将与第一列中的数字相关联的其他整数值相加,得到如下结果数组: 1122, 40, 50 3344, 30, 70 实现这一目标的最佳方法是什么 ------编辑------ 使用下面的第二个答案,我能够生成一个嵌套列表,如下所示:

我已经用java创建了一个2D整数数组,它打印了下面的

1122, 10, 20

3344, 20, 30

1122, 20, 20

1122, 10, 10

3344, 10, 40
我现在尝试迭代上述内容并创建一个新的2D数组。我想按第一列进行分组,并将与第一列中的数字相关联的其他整数值相加,得到如下结果数组:

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);

 }

}
int[]collectarray=new int[collect.size()];
for(int i=0;i
我会使用地图来保存第一列中的项目。搜索该值,如果该值存在,则添加要添加的值;如果该值不存在,则添加新值。遍历数组后,再遍历映射。

以下是使用流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());
更新

如果要直接在二维数组中获取结果,可以使用
toArray()
而不是
.collect(Collectors.toList())


谢谢你。我能够使用这种方法成功地创建嵌套列表。是否可以将结果直接作为二维整数数组,而不是嵌套列表进行处理和操作?我试图用上面编辑中的代码转换嵌套列表,但无法成功编译。@engage\u roll您可以直接获取2d数组,请参阅更新的答案。很乐意帮忙!这正是我需要的,效果很好。非常感谢!
collect.forEach(ints -> System.out.println(Arrays.toString(ints)));
int[][] collect = Arrays.stream(arr)
    ...
    ...
    .toArray(int[][]::new);