java - 对 2D Java 数组中的整数值进行分组以及相关值的求和

标签 java arrays multidimensional-array integer

我在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/

相关文章:

java - 在 Java (Apache Net Commons) 中下载整个 FTP 目录

java - 动态引用 bundle ,用于与 Pax Exam 进行集成测试

java - 如何在android studio中设置边框内的背景颜色?

PHP:如何从单选按钮创建数组并保存到 MySql

JavaFX:根据任务提示用户,并传回结果?

java - 算法设计: inserting bags into containers with a limited size

json - 使用 2d slice 嵌套 json 解码到结构中在 golang 中不起作用

python - 使用多维数组中的每个第一个元素

c# - 管理大量数据(高度数据)并替换这个巨大数组的最有效方法是什么?

arrays - Rails 3 检索所有曾孙记录作为 ActiveRecord 集合