stream进行分组
时间: 2024-09-23 11:04:55 浏览: 32
在Java Stream API中,`groupingBy()`函数是一个非常重要的方法,它允许你在流中根据某个键值对进行分组。这个操作返回一个`Collectors.groupingBy()`对象,它可以进一步转换为Map、List、Set等类型的收集器。
举个例子,假设你有一个Person对象列表,每个Person都有name属性,你想按照名字进行分组,可以这样做:
```java
List<Person> persons = ...; // 假设这是一个Person对象列表
// 使用Stream API进行分组
Map<String, List<Person>> groupedPeople = persons.stream()
.collect(Collectors.groupingBy(Person::getName));
```
在这个例子中,`Collectors.groupingBy(Person::getName)`告诉Java Stream使用每个Person的name属性作为键,然后把拥有相同名字的人放入同一个列表中。
结果`groupedPeople`是一个Map,其中键是名字,值是对应名字的Person对象列表。
如果你想要进一步操作每个分组,例如计算每个组的数量,你可以这样做:
```java
Map<String, Long> nameToCount = groupedPeople.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().size()));
```
阅读全文