java lambda分组后再排序
时间: 2023-10-23 22:08:49 浏览: 81
java 集合分组与排序
4星 · 用户满意度95%
可以使用Java 8的流(Stream)和Lambda表达式来实现分组后再排序,具体步骤如下:
1. 使用`Collectors.groupingBy()`方法按照指定的属性对元素进行分组,例如按照年龄分组:`groupingBy(Person::getAge)`
2. 使用`Collectors.toMap()`方法将分组后的结果转换为Map,其中Key为分组的属性值,Value为对应的元素列表,例如:`toMap(Function.identity(), Collectors.toList())`
3. 对Map中的Value进行排序,例如按照姓名排序:`Comparator.comparing(Person::getName)`
4. 最终将排序后的Map返回即可。
以下是一个示例代码:
```
List<Person> persons = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 20),
new Person("David", 25)
);
Map<Integer, List<Person>> result = persons.stream()
.collect(Collectors.groupingBy(Person::getAge,
Collectors.toMap(Function.identity(), Collectors.toList())))
.entrySet().stream()
.sorted(Comparator.comparing(e -> e.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
// 输出结果
result.forEach((age, list) -> {
System.out.println("Age " + age + ":");
list.stream().sorted(Comparator.comparing(Person::getName))
.forEach(p -> System.out.println(" " + p.getName()));
});
```
输出结果为:
```
Age 20:
Charlie
Age 25:
Alice
David
Age 30:
Bob
```
阅读全文