jdk8 list分组求和
时间: 2023-10-27 07:03:15 浏览: 50
在JDK8中,可以使用Stream API对List进行分组求和操作。
首先,我们需要使用`groupingBy()`方法对List进行分组。`groupingBy()`方法接受一个分类函数,并将List中的元素按照该分类函数的返回值进行分组。例如,假设我们有一个List<Integer>,我们可以使用以下代码将其按照奇偶数进行分组:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
Map<String, List<Integer>> groups = numbers.stream()
.collect(Collectors.groupingBy(n -> n % 2 == 0 ? "偶数" : "奇数"));
```
接下来,我们可以使用`summingInt()`方法对分组后的元素进行求和。`summingInt()`方法接受一个获取元素的函数,并返回对应的求和结果。例如,我们可以使用以下代码对分组后的奇数进行求和:
```
Map<String, Integer> sumMap = groups.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().stream().mapToInt(Integer::intValue).sum()
));
```
上述代码中,我们使用`toMap()`方法将分组后的结果转换为Map。`toMap()`方法需要提供一个key的获取函数和一个value的获取函数,我们通过`getKey()`获取了奇偶数的分类结果作为key,通过`getValue()`获取了对应的元素列表,然后通过`sum()`方法对元素列表进行求和。
最后,我们可以通过输出Map的方式查看分组求和的结果:
```
sumMap.forEach((group, sum) -> System.out.println(group + ": " + sum));
```
上述代码中,我们使用`forEach()`方法遍历Map,并打印每个分组和对应的求和结果。
综上所述,我们可以利用Stream API中的`groupingBy()`方法和`summingInt()`方法对List进行分组求和操作。