Java 8 将Int 与空值进行比较

San*_*s A 0 java int compare comparator java-stream

我有一个功能可以按 3 个整数字段对 pojo 列表进行排序。

目前我正在使用comparingInt()thenComparingBy()

但我可能会在两者之间得到一个空值。这会抛出一个NullPointerException.

为此,我想在末尾添加空值。Comparator.nullsLast()不适用于我的情况,因为我正在比较 3 个整数值。

有没有办法实现这一点......

Jon*_*oni 5

由于您的组件Integer对象是null您不能使用comparingInt它们的。不使用comparingInt,首先创建一个辅助 null-safe Integer 比较器,然后在 Pojo 比较器中使用它。

Comparator<Integer> nullsLast = Comparator.nullsLast(Comparator.naturalOrder());
Comparator<Pojo> pojoComparator = Comparator.comparing(Pojo::getFirstInteger, nullsLast)
            .thenComparing(Pojo::getSecondInteger, nullsLast)
            .thenComparing(Pojo::getThirdInteger, nullsLast);
Run Code Online (Sandbox Code Playgroud)