【问题标题】:Group integer values in a 2D Java Array and sum related values对二维 Java 数组中的整数值进行分组并对相关值求和
【发布时间】:2019-02-08 18:35:29
【问题描述】:

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

 }

}

【问题讨论】:

    标签: java arrays multidimensional-array integer


    【解决方案1】:

    这是使用流 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);
    

    【讨论】:

    • 谢谢。我能够使用这种方法成功创建一个嵌套列表。是否可以直接将结果作为我可以使用和操作的 2D 整数数组而不是嵌套列表来获取?我尝试使用上面编辑中的代码转换嵌套列表,但无法成功编译。
    • @engage_roll 您可以直接获取二维数组,请参阅更新后的答案。很高兴为您提供帮助!
    • 这正是我所需要的,效果很好。非常感谢!
    【解决方案2】:

    我会使用地图来保存第一列中的项目。对其进行搜索,如果存在,则添加要添加的值。如果不存在,则添加新值。一旦你遍历了你的数组,然后遍历地图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多