java stream流根据字段分组
时间: 2024-09-06 18:05:04 浏览: 51
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
Java中的Stream API提供了强大的数据处理能力,其中的`Collectors.groupingBy`是一个非常实用的收集器,用于根据指定的分类函数对流中的元素进行分组。分组后的结果是一个Map,其中键是分类函数的返回值,值是根据分类函数值分组的流元素的列表。
以下是一个简单的例子,展示了如何使用`groupingBy`进行分组:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupByExample {
public static void main(String[] args) {
List<Person> roster = Arrays.asList(
new Person("张三", "工程师"),
new Person("李四", "设计师"),
new Person("王五", "工程师"),
new Person("赵六", "设计师")
);
Map<String, List<Person>> groupByOccupation = roster.stream()
.collect(Collectors.groupingBy(Person::getOccupation));
System.out.println(groupByOccupation);
}
}
class Person {
private String name;
private String occupation;
public Person(String name, String occupation) {
this.name = name;
this.occupation = occupation;
}
public String getName() {
return name;
}
public String getOccupation() {
return occupation;
}
}
```
在这个例子中,我们有一个`Person`类的对象列表`roster`,其中包含人的姓名和职业。我们使用`groupingBy(Person::getOccupation)`按职业对人员列表进行分组。结果是一个Map,键是职业名称,值是具有相同职业的所有`Person`对象的列表。
使用`groupingBy`分组通常有以下几种形式:
1. 直接使用分类函数进行分组。
2. 使用`groupingBy`结合`Collectors.counting()`统计每个分组的数量。
3. 使用`groupingBy`结合`Collectors.mapping()`来收集分组元素的特定属性。
阅读全文