java8 stream List根据两个属性排序
时间: 2023-12-04 10:17:28 浏览: 87
可以使用Java 8中的Stream API来对List进行排序。假设`list`是一个包含元素类型为`T`的List,其中`T`有两个属性`prop1`和`prop2`,可以按照以下方式实现:
```java
List<T> sortedList = list.stream()
.sorted(Comparator.comparing(T::getProp1).thenComparing(T::getProp2))
.collect(Collectors.toList());
```
首先,使用`stream()`方法将List转换为Stream,然后使用`sorted()`方法对元素进行排序,排序规则为先按照prop1排序,再按照prop2排序。在`Comparator.comparing()`方法中,使用`T::getProp1`和`T::getProp2`分别获取prop1和prop2的值。最后使用`collect()`方法将排序结果转换为List即可。
需要注意的是,如果`T`的属性值可能为null,则需要在`comparing()`方法中使用`Comparator.nullsFirst()`或`Comparator.nullsLast()`方法对null值进行处理,例如:
```java
List<T> sortedList = list.stream()
.sorted(Comparator.comparing(T::getProp1, Comparator.nullsFirst(naturalOrder()))
.thenComparing(T::getProp2, Comparator.nullsLast(naturalOrder())))
.collect(Collectors.toList());
```
其中,`Comparator.nullsFirst()`方法将null值排在前面,`Comparator.nullsLast()`方法将null值排在后面,`naturalOrder()`方法是自然排序(用于对比非null值)。
阅读全文