java stream流对list中的多个字段进行分组
时间: 2023-08-05 16:09:43 浏览: 134
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
在Java 8及以上版本中,可以使用Stream API对List中的多个字段进行分组。以下是一个示例代码:
假设我们有一个Person类,其中包含name、age和city三个字段:
```java
public class Person {
private String name;
private int age;
private String city;
// 省略构造方法和getter/setter
}
```
现在我们有一个Person列表,需要按照city和age字段进行分组,代码如下:
```java
List<Person> personList = new ArrayList<>();
// 假设已经向personList中添加了多个Person对象
Map<String, Map<Integer, List<Person>>> result = personList.stream()
.collect(Collectors.groupingBy(Person::getCity,
Collectors.groupingBy(Person::getAge)));
```
上述代码中,我们首先使用groupingBy方法按照city字段进行分组,然后在第二个参数中使用groupingBy方法再对分组结果按照age字段进行分组,最终得到一个Map<String, Map<Integer, List<Person>>>类型的结果,其中外层Map的key为city字段的值,内层Map的key为age字段的值,value为符合条件的Person列表。
需要注意的是,使用Stream API进行分组时,需要注意对象的hashCode和equals方法是否正确实现,否则可能会导致分组结果不正确。
阅读全文