【问题标题】:Java Comparator.NullLast throwing NPE [duplicate]Java Comparator.NullLast 抛出 NPE [重复]
【发布时间】:2022-01-12 06:19:15
【问题描述】:

对地图进行排序

String 值可以是 Integer、Double 或 normal(必须将 String 解析为 Integer)

[一次,所有键都只能是一种数据类型]

键可以为空

nullsLast(comparing(o -> Double.valueOf(o.getKey())));

正在抛出 NPE。

如何让它发挥作用?

【问题讨论】:

  • Double.valueOf 会抛出 NPE
  • 如何处理

标签: java sorting comparator


【解决方案1】:

抛出 NullPointerException 的不是 nullsLast,而是 Double.valueOf(String) 方法。

您可以通过显式检查空值来处理此问题。

第二个问题是comparing 不支持空值。您要做的是按对象的键(解析为 Double)比较对象,使用 nullsLast 比较器比较键:

comparing(o -> o.getKey() == null ? null : Double.valueOf(o.getKey()), nullsLast(Comparator.naturalOrder()));

【讨论】:

  • ``` public static > Comparator 比较(函数 super T, ? extends U> keyExtractor) { Objects.requireNonNull(keyExtractor); return (Comparator & Serializable) (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2)); ```在比较函数中使用 NPE 失败
  • @moovon 是的,我不应该在没有自己尝试的情况下发布代码......
猜你喜欢
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2023-03-19
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多