stream流根据某个字段排序
时间: 2023-06-12 22:04:14 浏览: 134
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
要根据某个字段对Stream流进行排序,可以使用Java 8提供的`Comparator`接口和`sorted()`方法。
假设我们有一个`Person`类,包含`name`和`age`两个字段,我们要按照年龄对一个`List<Person>`进行排序,可以这样实现:
```java
List<Person> people = new ArrayList<>();
// 添加一些Person对象到people列表中
// 按照年龄升序排序
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparing(Person::getAge))
.collect(Collectors.toList());
// 按照年龄降序排序
List<Person> reverseSortedPeople = people.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.collect(Collectors.toList());
```
在上面的代码中,我们使用`Comparator.comparing()`方法创建一个比较器,指定了要按照`Person`对象的`age`属性进行比较。然后我们在`sorted()`方法中传入这个比较器,对流进行排序。最后使用`collect()`方法将排序后的结果收集到一个新的列表中。
如果我们要按照`name`字段进行排序,可以将`Person::getAge`改为`Person::getName`即可。如果要同时按照多个字段进行排序,可以使用`Comparator.thenComparing()`方法,例如:
```java
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparing(Person::getAge)
.thenComparing(Person::getName))
.collect(Collectors.toList());
```
在上面的代码中,当多个Person对象的`age`属性相等时,会按照`name`属性进行排序。
阅读全文