stream根据对象的字段对对象集合进行分组
时间: 2023-09-27 19:04:41 浏览: 92
java8 集合 多字段 分组 统计个数代码
5星 · 资源好评率100%
在Java 8中,可以使用流处理框架提供的操作来根据对象的字段对对象集合进行分组。示例如下:
```java
List<Person> persons = ...; // 假设有一个Person对象集合,每个对象都有一个city属性
Map<String, List<Person>> personByCity = persons.stream()
.collect(Collectors.groupingBy(Person::getCity)); // 根据city字段进行分组,返回一个Map<String, List<Person>>对象
```
`groupingBy()`方法接受一个Function作为参数,用于从集合中的每个对象中获取分组依据的值。在上面的例子中,我们使用`Person::getCity`方法引用作为分组依据。
如果想要对分组后的结果进行进一步的操作,可以使用`Collectors.toMap()`等操作。例如,可以统计每个城市的Person对象数量:
```java
Map<String, Long> personCountByCity = persons.stream()
.collect(Collectors.groupingBy(Person::getCity, Collectors.counting())); // 统计每个城市的Person对象数量,返回一个Map<String, Long>对象
```
`counting()`方法返回一个收集器,用于计算分组后的元素数量。在上面的例子中,我们将`counting()`方法作为第二个参数传递给`groupingBy()`方法。
阅读全文