java - 关于汇总列表中的值的建议

标签 java list sum compare

我有一个如下所示的字符串列表:

"AB", "XY", 10
"CD", "XY", 15
"CD", "XY", 12
"AB", "XY", 19

我想要做的是将最后一个值中的数字与第一个值相加,并将其放入一个新列表中。

所以这会给我:

"AB", "XY", 29
"CD", "XY", 27

我是 Java 新手,所以我仍然在语法和不同方法上苦苦挣扎。我查看了compareTo() 和equals() 方法,但是唉。需要一些帮助。

最佳答案

第一个问题是:为什么将其作为字符串列表?看来您有一个包含 3 个属性的对象列表:2 个字符串和一个整数。拥有这样的数据结构将使代码更容易阅读和编写。

现在,要解决这个问题,您首先需要创建一个映射来保存字符串的第一部分和数字的总和:

  1. 使用 Stream API, map 是通过 Collectors.groupingBy 创建的收集器将每个字符串分类到字符串的第一部分,即最后一个逗号之前的所有内容。然后,对于分类到同一键的所有值,我们使用Collectors.summingInt求和。 ,最后一个逗号后面的数字。
  2. 当我们拥有该映射时,我们可以迭代其所有条目并将每个条目转换回 String最后将其收集到一个列表中 Collectors.toList() .

示例代码:

public static void main(String[] args) {
    List<String> list = Arrays.asList("\"AB\", \"XY\", 10", "\"CD\", \"XY\", 15", "\"CD\", \"XY\", 12", "\"AB\", \"XY\", 19");

    Map<String, Integer> map =
        list.stream()
            .collect(Collectors.groupingBy(
                s -> s.substring(0, s.lastIndexOf(',')),
                Collectors.summingInt(s -> Integer.parseInt(s.substring(s.lastIndexOf(',') + 2)))
            ));
    List<String> result =
        map.entrySet()
           .stream()
           .map(e -> e.getKey() + ", " + e.getValue())
           .collect(Collectors.toList());

    System.out.println(result);
}

关于java - 关于汇总列表中的值的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685767/

相关文章:

java - JAXB 和多对象关系

java - JAXB 使用 Woodstox 解析器来提高性能?

python - 在 Python 中 : How to remove an object from a list if it is only referenced in that list?

excel - 添加先前单元格和当前单元格功能

jQuery 输入字段中总时间的总和

sql - SQL Server 中的 SUM 返回错误值

java - 构造函数和 setter 中的验证字段是否被认为是错误的冗余代码?

c - 将节点插入 Dllist

python - 将字符串与列表中的单词匹配

java - JMockit:测试覆盖抽象方法的方法