stream根据属性分组
时间: 2023-11-22 18:48:00 浏览: 88
根据某个属性对List中的所有对象分组,该属性值相同的对象分到一个组
根据属性分组是Stream API中非常常见的操作之一。可以使用`Collectors.groupingBy()`方法来实现这个功能。下面是一个示例代码,展示如何根据对象属性进行分组:
假设我们有一个`Person`类,其中包含`name`和`age`属性。我们想要根据`age`属性对`Person`对象进行分组,代码如下:
```java
Map<Integer, List<Person>> peopleByAge = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
上述代码将`people`列表中的`Person`对象按照`age`属性进行分组,并将结果存储在一个`Map`对象中。`Map`对象的键是`age`属性的值,值是一个`Person`对象列表。
如果我们想要按照多个属性进行分组,可以使用`Collectors.groupingBy()`方法的重载版本。例如,如果我们想要按照`age`和`name`属性进行分组,代码如下:
```java
Map<Integer, Map<String, List<Person>>> peopleByAgeAndName = people.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.groupingBy(Person::getName)));
```
上述代码将`people`列表中的`Person`对象按照`age`和`name`属性进行分组,并将结果存储在一个嵌套的`Map`对象中。外层的`Map`对象的键是`age`属性的值,值是一个内层的`Map`对象。内层的`Map`对象的键是`name`属性的值,值是一个`Person`对象列表。
阅读全文