stream() 分组 自定义排序
时间: 2023-11-09 09:00:07 浏览: 184
java8 stream自定义分组求和并排序的实现
您可以使用Java 8中的`stream()`方法对元素进行分组,并通过自定义排序每个组进行排序。可以使用`Collectors.groupingBy()`方法进行分组,然后使用`Collectors.collectingAndThen()`方法结合`Stream.sorted()`方法对每个组进行排序。
下面是一个示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 20),
new Person("David", 35),
new Person("Eve", 25),
new Person("Frank", 30)
);
Map<Integer, List<Person>> groupedAndSorted = persons.stream()
.collect(Collectors.groupingBy(Person::getAge,
Collectors.collectingAndThen(Collectors.toList(),
list -> list.stream()
.sorted(Comparator.comparing(Person::getName))
.collect(Collectors.toList()))));
groupedAndSorted.forEach((age, list) -> {
System.out.println("Age " + age + ":");
list.forEach(person -> System.out.println(person.getName()));
System.out.println();
});
}
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
```
输出结果将按年龄分组,并对每个组按名称进行排序:
```
Age 20:
Charlie
Age 25:
Alice
Eve
Age 30:
Bob
Frank
Age 35:
David
```
阅读全文