java8 分组求和
时间: 2023-08-04 15:12:36 浏览: 102
JAVA8 stream中三个参数的reduce方法对List进行分组统计操作
5星 · 资源好评率100%
在Java8中,可以使用`Collectors.groupingBy()`方法和`Collectors.summingInt()`方法对列表进行分组求和。下面是一个示例代码:
假设有一个`Person`类,该类包含姓名和年龄属性:
```java
public 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;
}
}
```
现在有一个`List<Person>`列表,需要按年龄分组并计算每个年龄组中的人数。
```java
List<Person> people = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 30),
new Person("Charlie", 25),
new Person("David", 20),
new Person("Eva", 25)
);
Map<Integer, Integer> ageCountMap = people.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.summingInt(p -> 1)));
System.out.println(ageCountMap);
```
输出结果为:
```
{20=2, 25=2, 30=1}
```
其中,`groupingBy()`方法将`Person`对象按照年龄分组,并返回一个`Map<Integer, List<Person>>`,其中键为年龄,值为该年龄组中的`Person`对象列表。
`summingInt()`方法将一个`Function`作为参数,该函数用于将`Person`对象转换为`Integer`类型。这里我们使用了一个匿名函数`p -> 1`,表示每个`Person`对象被转换为`1`。因此,`summingInt()`方法将计算每个年龄组中的`Person`对象数量,并返回一个`Map<Integer, Integer>`,其中键为年龄,值为该年龄组中的人数。
阅读全文