java8 stream分组后再聚合求总数
时间: 2024-02-23 10:16:14 浏览: 94
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合.md
要在Java 8 Stream中进行分组后再聚合求总数,可以使用`Collectors.groupingBy()`方法进行分组操作,然后使用`Collectors.summingInt()`方法进行聚合求和操作。
下面是一个示例代码:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("John", 25),
new Person("Jane", 30),
new Person("Bob", 20),
new Person("Alice", 35),
new Person("John", 40)
);
Map<String, Integer> totalAgeByPerson = persons.stream()
.collect(Collectors.groupingBy(Person::getName, Collectors.summingInt(Person::getAge)));
System.out.println("Total age by person: " + totalAgeByPerson);
}
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
```
在上述示例中,我们有一个`Person`类,其中包含姓名和年龄字段。我们创建了一个包含几个`Person`对象的列表。通过使用`stream()`方法获取列表的流,然后使用`Collectors.groupingBy()`方法按姓名字段进行分组,并使用`Collectors.summingInt()`方法对每个分组中的年龄字段进行求和。最终,我们得到了一个`Map`,其中键是姓名,值是年龄字段的总和。输出结果为:
```
Total age by person: {Alice=35, Bob=20, John=65, Jane=30}
```
请注意将代码中的`Person`类替换为您实际使用的类,并相应地更改`groupingBy()`方法和`summingInt()`方法中的字段引用。
阅读全文