java stream 按照多个字段进行排序
时间: 2023-10-21 10:12:09 浏览: 93
可以使用`Comparator.comparing`方法来按照多个字段进行排序,例如:
假设有一个`List<Person>`,每个`Person`对象有`name`、`age`和`id`三个字段,现在要按照`name`字段升序排序,`age`字段降序排序,`id`字段升序排序,可以使用以下代码:
```
List<Person> personList = ...;
personList.sort(Comparator.comparing(Person::getName)
.thenComparing(Comparator.comparing(Person::getAge).reversed())
.thenComparing(Person::getId));
```
其中,`Comparator.comparing`方法按照指定字段升序排序,`thenComparing`方法可以链式调用,按照多个字段进行排序,`reversed`方法将排序方式改为降序。
这样,`personList`就会按照上述要求排序后的结果。
相关问题
java stream复杂对象多字段排序
Java Stream API 提供了一种灵活的方式来进行多字段排序,可以使用 Comparator.comparing() 方法来比较多个字段,并返回一个 Comparator 对象,然后使用 Stream API 的 sorted() 方法对复杂对象进行排序。
java stream复杂对象多字段排序 给我个示例
假设有一个包含多个字段的对象 Person,其中包含 name、age 和 gender 三个字段,我们可以按照 age 字段进行排序,并且在 age 相同时按照 name 字段进行排序,示例代码如下:
```
List<Person> personList = new ArrayList<>();
// 假设已经将 Person 对象加入到 personList 中
List<Person> sortedList = personList.stream()
.sorted(Comparator.comparing(Person::getAge)
.thenComparing(Person::getName))
.collect(Collectors.toList());
```
上述代码中,我们使用了 Java 8 中的 Stream API,首先调用了 `personList.stream()` 方法将 personList 转换成 Stream 对象,然后使用 `sorted()` 方法进行排序,传入了一个 Comparator 对象,使用了 `comparing()` 方法指定了按照 age 字段进行排序,使用了 `thenComparing()` 方法指定了在 age 相同时按照 name 字段进行排序。最后使用 `collect()` 方法将排序后的 Stream 对象转换成 List 对象并返回。
需要注意的是,如果要按照多个字段进行排序,需要使用 `thenComparing()` 方法,同时需要保证每个字段都实现了 `Comparable` 接口或者传入了对应的 Comparator 对象。
阅读全文