Java stream对多个字段进行分组统计
时间: 2023-08-20 22:04:24 浏览: 269
java8 集合 多字段 分组 统计个数代码
5星 · 资源好评率100%
你可以使用Java Stream的`collect()`方法结合`groupingBy()`和`summingInt()`来实现多个字段的分组统计。
假设你有一个包含多个字段的对象列表,你想要按照其中两个字段进行分组,并统计每个组中对象的数量。下面是一个示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
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;
}
}
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Alice", 35),
new Person("Bob", 40),
new Person("Charlie", 20)
);
Map<String, Map<Integer, Long>> result = people.stream()
.collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge, Collectors.counting())));
System.out.println(result);
}
}
```
在上面的示例中,我们首先使用`groupingBy()`按照姓名字段对对象进行分组,然后在每个分组中再次使用`groupingBy()`按照年龄字段进行分组,并使用`counting()`统计每个分组中的对象数量。最后,将结果存储在一个嵌套的`Map`中。
输出结果将是一个类似于`{Alice={25=1, 35=1}, Bob={40=1, 30=1}, Charlie={20=1}}`的`Map`,其中外层的键是姓名,内层的键是年龄,值是对象数量。
你可以根据自己的需求修改代码来适应不同的字段和统计方式。希望对你有帮助!如果还有其他问题,请随时问我。
阅读全文