stream排序null
时间: 2025-05-22 11:43:01 浏览: 14
### Java Stream 排序时处理 Null 值
当使用 `Stream` 对象进行排序时,如果数据集中存在 `null` 值,则可能会抛出异常。为了安全地处理这些情况,在比较器中可以定义对于 `null` 的特殊逻辑。
下面是一个例子,展示了如何在对 `List<LovValueDTO>` 进行排序的同时妥善处理可能存在的 `null` 订单序列号:
```java
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
public class LovValueDTOSorter {
public static void main(String[] args) {
List<LovValueDTO> lov = ... ; // 初始化列表
Comparator<LovValueDTO> nullSafeOrderSeqComparator =
Comparator.comparing(
(LovValueDTO dto) -> Optional.ofNullable(dto.getOrderSeq()),
Comparator.nullsLast(Integer::compareTo));
lov = lov.stream()
.sorted(nullSafeOrderSeqComparator)
.collect(Collectors.toList());
}
}
```
在这个实现里,引入了 `Optional<T>.ofNullable(T)` 方法来封装潜在为空的对象,并利用 `Comparator.nullsLast()` 来指定当遇到 `null` 时应将其放在最后的位置[^1]。
另外一种方式是直接在 `comparing` 中嵌入三元运算符来进行判断:
```java
lov = lov.stream()
.sorted(Comparator.comparing(
LovValueDTO::getOrderSeq,
(o1, o2) ->
Objects.compare(o1 != null ? o1 : Integer.MAX_VALUE,
o2 != null ? o2 : Integer.MAX_VALUE,
Integer::compare)))
.collect(Collectors.toList());
```
这里采用了 `Objects.compare` 和自定义的比较函数,使得任何 `null` 都会被视为具有最大整数值从而被放置于排序后的末端位置[^2]。
阅读全文
相关推荐


















