stream分组排序
时间: 2023-08-25 18:18:08 浏览: 135
stream分组排序是一种对流进行分组并按照特定条件进行排序的操作。在Java 8及以上版本中,可以使用`Collectors.groupingBy`和`Collectors.toMap`方法来实现分组排序。
首先,使用`Collectors.groupingBy`方法将流按照指定的属性进行分组。例如,设有一个名为`Person`的类,其中包含name和age属性,我们想按照age属性进行分组排序,可以这样写:
```java
Map<Integer, List<Person>> groupedByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
上述代码将根据age属性将Person对象分组,并将结果存储在一个Map中,其中key是age值,value是具有相同age值的Person对象列表。
接下来,可以使用`Collectors.toMap`方法对分组后的结果进行排序。例如,如果想按照age属性对分组后的结果进行升序排序,可以这样写:
```java
Map<Integer, List<Person>> sortedByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));
```
上述代码中,我们首先将分组后的结果转换为一个流(entrySet),然后使用`sorted`方法按照key(age)进行排序。最后,使用`Collectors.toMap`方法将排序后的结果存储在一个新的LinkedHashMap中。
总结:stream分组排序可以通过`Collectors.groupingBy`和`Collectors.toMap`方法实现。首先使用`groupingBy`方法对流进行分组,然后使用`toMap`方法对分组结果进行排序。
阅读全文