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);
我有按 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);