如何用stream流对对象内的两个属性,先按其中一个属性进行排序再按另一个属性进行组内排序
时间: 2024-01-21 20:17:46 浏览: 149
可以使用 Java 8 中的 `Comparator` 接口和 `Stream` 流来实现对对象内的两个属性排序。
假设有一个对象类为 `Person`,包含两个属性 `name` 和 `age`,我们需要先按照 `name` 属性进行排序,再按照 `age` 属性进行组内排序,可以按照以下步骤实现:
1. 定义一个名为 `Comparator.comparing()` 的静态方法,用于指定按照 `name` 属性进行排序。
2. 调用 `thenComparing()` 方法,指定按照 `age` 属性进行组内排序。
3. 将对象转换为 `Stream` 流,并调用 `sorted()` 方法,将对象按照指定的排序规则进行排序。
以下是代码示例:
```java
List<Person> persons = new ArrayList<>();
// 添加 Person 对象到列表中
// 先按照 name 属性进行排序,再按照 age 属性进行组内排序
List<Person> sortedPersons = persons.stream()
.sorted(Comparator.comparing(Person::getName).thenComparing(Person::getAge))
.collect(Collectors.toList());
```
在上述示例中,`Person::getName` 和 `Person::getAge` 分别是获取 `name` 和 `age` 属性的方法引用,`Comparator.comparing()` 方法会根据指定的属性进行排序,`thenComparing()` 方法会在原有排序基础上,按照指定的顺序再进行排序。最终通过 `Collectors.toList()` 方法将排序后的结果收集到一个列表中。
阅读全文