用stream流 ,能对上述的name属性进行分组,再对组内的age属性进行排序吗?
时间: 2023-12-18 16:04:59 浏览: 62
把这个表以name1字段进行分组,每个分组再心name2字段进行asc排序
是的,可以使用Java 8中的stream流对name属性进行分组,然后对每个分组内的age属性进行排序。下面是示例代码:
```java
List<Person> persons = Arrays.asList(
new Person("John", 25),
new Person("Jane", 30),
new Person("John", 20),
new Person("Tom", 35),
new Person("Jane", 28)
);
Map<String, List<Person>> groupedByName = persons.stream()
.collect(Collectors.groupingBy(Person::getName));
groupedByName.forEach((name, people) -> {
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparingInt(Person::getAge))
.collect(Collectors.toList());
System.out.println(name + ": " + sortedPeople);
});
```
输出结果为:
```
Jane: [Person{name='Jane', age=28}, Person{name='Jane', age=30}]
John: [Person{name='John', age=20}, Person{name='John', age=25}]
Tom: [Person{name='Tom', age=35}]
```
在这个示例中,我们首先使用stream流将Person对象按照name属性进行分组,得到一个Map<String, List<Person>>对象。然后对于每个分组,我们使用另一个stream流对其内部的Person对象按照age属性进行排序,最后打印输出每个分组和排序后的结果。
阅读全文