Java 8 compareInt 与空值

Java 8 comparingInt with null values

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

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

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

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

有没有办法实现这个....

最简单的方法似乎是编写一个比较器,它专门针对适用于对特定 pojo 进行排序的确切关注点。

在我看来,这比将不符合您要求的行为的部件拼接在一起更明显(例如,比较 Int 不允许空引用)。

由于您的组件 Integer 对象是 null,您不能对它们使用 comparingInt。不要使用 comparingInt,而是先创建一个辅助空安全整数比较器,然后在您的 Pojo 比较器中使用它。

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