JAVA空安全_java – 空安全映射使用默认实现的比较器

在Java 8中创建一个空安全映射比较器是否有内置的可能性,而无需编写自己的Comparator实现?

运行以下代码时,会导致NPE,因为Comparator.comparing()的keyExtractor参数可能返回空值:

public class ToSort

{

private String sortBy;

public ToSort(String sortBy)

{

this.sortBy = sortBy;

}

public String getSortBy()

{

return sortBy;

}

public static void main(String[] args)

{

// mapping comparator

Comparator comp = Comparator.comparing(ToSort::getSortBy);

SortedSet set = new TreeSet<>(comp);

ToSort o1 = new ToSort("1");

ToSort o2 = new ToSort(null);

set.add(o1);

System.out.println(set.contains(o2)); //NPE because o2.getSortBy() == null

}

}

Exception in thread “main” java.lang.NullPointerException

at java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469)

at java.util.Comparator$$Lambda$2/1480010240.compare(Unknown Source)

at java.util.Comparators$NullComparator.compare(Comparators.java:83)

at java.util.TreeMap.getEntryUsingComparator(TreeMap.java:376)

at java.util.TreeMap.getEntry(TreeMap.java:345)

at java.util.TreeMap.containsKey(TreeMap.java:232)

at java.util.TreeSet.contains(TreeSet.java:234)

at test.ToSort.main(ToSort.java:48)

运用

Comparator comp = Comparator.nullsFirst(Comparator.comparing(ToSort::getSortBy));

不能正常工作,因为只有空值的ToSort对象才能正常运行。

我知道如何编写我自己的比较器实现,我只是搜索一个更“优雅”的解决方案

Comparator.comparingNullsFirst(ToSort::getSortBy)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值