Collectors.collectingAndThen 分组后排序
时间: 2024-02-06 13:04:15 浏览: 95
java8 集合 多字段 分组 统计个数代码
5星 · 资源好评率100%
您可以使用`Collectors.collectingAndThen`方法来在分组之后进行排序。这个方法接受两个参数:一个用于分组的收集器和一个函数,用于对收集结果进行转换。
在分组后进行排序的示例代码如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建一个示例数据列表
List<Person> people = Arrays.asList(
new Person("Alice", "Developer"),
new Person("Bob", "Manager"),
new Person("Charlie", "Developer"),
new Person("David", "Manager")
);
// 使用Collectors.groupingBy对职位进行分组,并使用Collectors.collectingAndThen在分组后进行排序
Map<String, List<Person>> groupedPeople = people.stream()
.collect(Collectors.groupingBy(Person::getPosition, Collectors.collectingAndThen(
Collectors.toList(),
list -> {
// 对列表进行排序
list.sort(Comparator.comparing(Person::getName));
return list;
}
)));
// 打印分组结果
groupedPeople.forEach((position, list) -> {
System.out.println(position + ":");
list.forEach(person -> System.out.println("- " + person.getName()));
System.out.println();
});
}
static class Person {
private String name;
private String position;
public Person(String name, String position) {
this.name = name;
this.position = position;
}
public String getName() {
return name;
}
public String getPosition() {
return position;
}
}
}
```
这段代码将根据职位对人员列表进行分组,并在每个分组内按照姓名进行排序。最终的分组结果将以职位为键,对应的人员列表为值进行输出。
希望这个示例能够帮助到您!如果有任何疑问,请随时提问。
阅读全文