Java Comparator.NullLast 抛出 NPE [重复]

Posted

技术标签:

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

对地图进行排序

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

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

键可以为空

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

正在抛出 NPE。

如何让它发挥作用?

【问题讨论】:

Double.valueOf 会抛出 NPE 如何处理 【参考方案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 是的,我不应该在没有自己尝试的情况下发布代码......

以上是关于Java Comparator.NullLast 抛出 NPE [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java Math

Java 布尔运算

java [Java] Java常用代码#java

Java - 35 Java 实例

Java While 循环

Java 字符串