stream流 list根据某个字段分组
时间: 2025-07-03 20:49:54 浏览: 6
### 使用 Java Stream API 对 List 进行基于对象字段的分组
在 Java 中,`Stream API` 提供了一种简洁而强大的方式来处理集合数据。要根据对象的一个特定字段对 `List` 进行分组,可以使用 `Collectors.groupingBy()` 方法。
下面是一个具体的例子,展示如何实现这一功能:
假设有一个名为 `Person` 的类,其中包含姓名 (`name`) 和年龄 (`age`) 字段:
```java
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters...
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
```
现在创建一些 `Person` 实例并放入列表中:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 30),
new Person("David", 25)
);
```
接下来利用 `stream().collect(Collectors.groupingBy())` 来按照 `age` 属性进行分组:
```java
Map<Integer, List<Person>> groupedPeople = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
上述代码会返回一个映射表 (map),键为整数类型的年龄值,对应的值则是一系列具有相同年龄的人组成的列表[^1]。
如果想要进一步统计每一年龄段有多少个人,则可以在收集器链上调用另一个收集器 `counting()` :
```java
Map<Integer, Long> countPerAgeGroup = people.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
```
这段代码将会给出每个年龄段人数的结果。
阅读全文
相关推荐

















