我想要一个空安全比较器。但我尝试了很多方法,但都不起作用。**getBenefitLimit**是一个**BigDecimal**值,Comparator中没有比较BigDecimal值。在这种情况下,如何计算。。。
我的代码和错误使用out null(Comparator.nullsFirst(
List<ProductBenefitResponse> list = new ArrayList<>(benefitMap.values());
list.sort(Comparator.comparing(ProductBenefitResponse::getDescription).thenComparing(ProductBenefitResponse::getBenefitLimit));
错误必须为:-
java.lang.NullPointerException: null
at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469)
at java.base/java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:217)
at java.base/java.util.TimSort.binarySort(TimSort.java:296)
at java.base/java.util.TimSort.sort(TimSort.java:239)
at java.base/java.util.Arrays.sort(Arrays.java:1515)
at java.base/java.util.ArrayList.sort(ArrayList.java:1750)
我的代码和错误使用null(Comparator.nullsFirst(
List<ProductBenefitResponse> list = new ArrayList<>(benefitMap.values());
list.sort(Comparator.nullsFirst(
Comparator.comparing(ProductBenefitResponse::getBenefitLimit)
.thenComparing(ProductBenefitResponse::getDescription)
));
错误必须为:-
java.lang.NullPointerException: null
at java.base/java.math.BigDecimal.compareTo(BigDecimal.java:3065)
at java.base/java.math.BigDecimal.compareTo(BigDecimal.java:228)
at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469)
at java.base/java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:216)
at java.base/java.util.Comparators$NullComparator.compare(Comparators.java:83)
at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.base/java.util.TimSort.sort(TimSort.java:234)
at java.base/java.util.Arrays.sort(Arrays.java:1515)
at java.base/java.util.ArrayList.sort(ArrayList.java:1750)
这个代码出了什么问题,请给我答案。。。
现在nullsFirst
应用于ProductBenefitResponse
对象,而不是BigDecimal
值。
试试这个:
Comparator<BigDecimal> bigDecimalComparator = Comparator.nullsFirst(Comparator.naturalOrder());
list.sort(
Comparator
.comparing(ProductBenefitResponse::getDescription)
.thenComparing(ProductBenefitResponse::getBenefitLimit, bigDecimalComparator)
);
通过为映射指定空安全比较器,它将应用于映射的结果。
我找到了一种简单的方法。这是正确的吗?它会返回我想要的值。
List<ProductBenefitResponse> list = new ArrayList<>
(benefitMap.values());list.sort(Comparator.comparing(ProductBenefitResponse::getDescription,Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(ProductBenefitResponse::getBenefitLimit,Comparator.nullsLast(Comparator.naturalOrder())));