我想要一個空安全比較器。但是我嘗試了很多方法 ii 不起作用。**getBenefitLimit **是一個 **BigDecimal **值,在 Comparator 中沒有比較 BigDecimal 值。在那種情況下怎么能想到這個......
我的代碼和錯誤使用不帶空(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)
這段代碼有什么問題,請給我并回答...
uj5u.com熱心網友回復:
現在nullsFirst應用于ProductBenefitResponse物件,而不是BigDecimal值。
嘗試這個:
Comparator<BigDecimal> bigDecimalComparator = Comparator.nullsFirst(Comparator.naturalOrder());
list.sort(Comparator.comparing(ProductBenefitResponse::getDescription)
.thenComparing(ProductBenefitResponse::getBenefitLimit, bigDecimalComparator));
通過為映射指定 null 安全比較器,它適用于映射的結果。
uj5u.com熱心網友回復:
我找到了簡單的方法,這是正確的嗎?無論如何它都會回傳我想要的值。
List<ProductBenefitResponse> list = new ArrayList<>
(benefitMap.values());list.sort(Comparator.comparing(ProductBenefitResponse::getDescription,Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(ProductBenefitResponse::getBenefitLimit,Comparator.nullsLast(Comparator.naturalOrder())));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525614.html
標籤:爪哇弹簧靴
上一篇:任務“:bootRun”執行失敗。SpringBoot搖籃
下一篇:SQL狀態:90057,訊息:未找到約束“PRIMARYKEY|UNIQUE(USERNAME)”;SQL陳述句:
