我有一个如下所示的字符串列表:
"AB", "XY", 10
"CD", "XY", 15
"CD", "XY", 12
"AB", "XY", 19
我想要做的是将最后一个值中的数字与第一个值相加,并将其放入一个新列表中。
所以这会给我:
"AB", "XY", 29
"CD", "XY", 27
我是 Java 新手,所以我仍然在语法和不同方法上苦苦挣扎。我查看了compareTo() 和equals() 方法,但是唉。需要一些帮助。
最佳答案
第一个问题是:为什么将其作为字符串列表?看来您有一个包含 3 个属性的对象列表:2 个字符串和一个整数。拥有这样的数据结构将使代码更容易阅读和编写。
现在,要解决这个问题,您首先需要创建一个映射来保存字符串的第一部分和数字的总和:
- 使用 Stream API, map 是通过
Collectors.groupingBy
创建的收集器将每个字符串分类到字符串的第一部分,即最后一个逗号之前的所有内容。然后,对于分类到同一键的所有值,我们使用Collectors.summingInt
求和。 ,最后一个逗号后面的数字。 - 当我们拥有该映射时,我们可以迭代其所有条目并将每个条目转换回
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/