开发过程中对象集合根据某个属性排序是常常遇到的情况,但有时排序会遇到对应属性值为null的情况,会报空指针异常。查找stream.sorted源码看到有Comparator.nullsFirst和Comparator.nullsLast方法,使用方法如下:
时间: 2024-10-15 22:13:07 浏览: 30
在Java开发中,当你需要对集合(如List、Set等)按照某个属性进行排序,确实可能会遇到元素属性值为null的情况。在这种场景下,直接使用`Collections.sort()`或`Arrays.sort()`默认规则可能会导致`NullPointerException`,因为它们通常假设所有元素都有非null的比较键。
`Stream.sorted()`方法提供了解决这个问题的方法,它接受一个`Comparator`作为参数。`Comparator`接口有两个静态工厂方法:
- `Comparator.nullsFirst(compareToMethod)`:这个方法创建了一个Comparator,当两个元素都为null时,第一个null会被认为比第二个小,即sort后排在前面。
- `Comparator.nullsLast(compareToMethod)`:相反,这个方法将第一个null视为大的,放在排序后的末尾。
例如,如果你有一个Person对象列表,你想按年龄升序排序,如果有的人的年龄字段是null,你可以这样做:
```java
List<Person> people = ...;
people.stream()
.sorted(Comparator.comparingInt(Person::getAge).nullsFirst())
.collect(Collectors.toList());
```
这将会保证年龄为null的人排在年龄有值的人之前或之后,取决于你选择的`nullsFirst`或`nullsLast`。
阅读全文