thenComparing没有Comparator.nullsFirst
时间: 2023-10-13 18:19:08 浏览: 181
如果你使用的是 Java 8 或以上版本,那么 `Comparator` 类中是有 `nullsFirst` 和 `nullsLast` 方法的。但是如果你使用的是 Java 7 或以下版本的话,那么就没有这两个方法。
在 Java 7 或以下版本中,可以使用 `ComparatorChain` 类来实现多级排序,并且可以指定 `null` 值的排列顺序。以下是一个示例:
```java
List<Person> persons = new ArrayList<>();
// 添加一些 Person 对象到 persons 列表中
ComparatorChain chain = new ComparatorChain();
chain.addComparator(new AgeComparator());
chain.addComparator(new NameComparator(), true); // true 表示 null 值排在前面
Collections.sort(persons, chain);
```
其中,`AgeComparator` 和 `NameComparator` 是自定义的比较器,分别用于按照年龄和姓名进行排序。`true` 表示 `null` 值排在前面,如果希望 `null` 值排在后面,可以将其改为 `false`。
需要注意的是,`ComparatorChain` 类不是 Java 标准库中的类,需要引入 Apache Commons Collections 库才能使用。
相关问题
list2 = list.stream().sorted(Comparator.comparing(dto -> orderList.indexOf(dto.getOrgType())) .thenComparing(CxCadreSituationDTO::getEstab,Comparator.nullsFirst(String::compareTo)).reversed()) .map(CxCadreSituationDTO::getEstabDesc).distinct().collect(Collectors.toList());getOrgType报错Cannot resolve method 'getOrgType()'
这个报错说明 `dto` 对象没有 `getOrgType()` 方法。你可以尝试将 `Comparator.comparing(dto -> orderList.indexOf(dto.getOrgType()))` 这一行改为 `Comparator.comparing(CxCadreSituationDTO::getOrgType, Comparator.comparingInt(orderList::indexOf))`,这样就可以直接使用 `getOrgType()` 方法了。即:
```
list2 = list.stream()
.sorted(Comparator.comparing(CxCadreSituationDTO::getOrgType, Comparator.comparingInt(orderList::indexOf))
.thenComparing(CxCadreSituationDTO::getEstab, Comparator.nullsFirst(String::compareTo)).reversed())
.map(CxCadreSituationDTO::getEstabDesc)
.distinct()
.collect(Collectors.toList());
```
这里使用了方法引用 `CxCadreSituationDTO::getOrgType` 来获取 `orgType` 属性。同时使用了 `Comparator.comparingInt(orderList::indexOf))` 来获取 `orderList` 中元素的索引,这个方法会返回一个 `int` 类型的索引值,可以直接用于比较。
Comparator.thenComparing比较的字段值为null空指针错误
在使用Comparator.thenComparing方法进行比较时,如果比较的字段值为null,可能会出现空指针错误。为了解决这个问题,可以使用nullsFirst或nullsLast方法来处理空值安全性。
下面是一个示例代码,演示了如何使用nullsLast方法处理空指针错误:
```java
list = list.stream()
.sorted(Comparator.comparing(
SalesOrderMonthlyStatementVo::getReviewerGroupId,
Comparator.nullsLast(Long::compareTo))
.thenComparing(
SalesOrderMonthlyStatementVo::getReviewerId,
Comparator.nullsLast(Long::compareTo))
.thenComparing(
SalesOrderMonthlyStatementVo::getVarieties,
Comparator.nullsLast(String::compareTo)))
.collect(Collectors.toList());
```
在上述代码中,我们使用了Comparator.nullsLast方法来处理空值安全性。这样,即使比较的字段值为null,也不会出现空指针错误。
阅读全文