【问题标题】:Java 8 comparingInt with null valuesJava 8 将 Int 与空值进行比较
【发布时间】:2020-11-15 22:15:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 所以你有Integer 字段,而不是int 字段,对吧?否则它们不可能是null,或者是包含字段null 的整个对象?
  • 是的整数字段
  • 您必须实现自己的比较器。

标签: java int compare java-stream comparator


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    最简单的方法似乎是编写一个比较器,专门针对应用于排序特定 pojo 的确切问题。

    在我看来,这比将不符合您要求的部分(例如,comparingInt 不容忍空引用)放在一起更明显。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多