- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个包含多个“可选”(不是 java.util.Optional
)字段的类。我正在编写一个 Lambda 比较器,通过比较它们属性的一个子集来测试是否相等
我写了
private final static Comparator<MyEntity> COMPARATOR_491 =
comparing(MyEntity::getIsin)
.thenComparing(MyEntity::getTMarketType)
.thenComparing(nullsFirst(comparing(MyEntity::getIsoCode)))
.thenComparing(MyEntity::getTaxRate)
.thenComparing(nullsFirst(comparing(MyEntity::getEndDate)));
问题是我经常遇到 NullPointerException
。这是(几乎不可读的)堆栈跟踪
java.lang.NullPointerException: null
at java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469) ~[?:1.8.0_51]
at java.util.Comparator$$Lambda$40/221702765.compare(Unknown Source) ~[?:?]
at java.util.Comparators$NullComparator.compare(Comparators.java:83) ~[?:1.8.0_51]
at java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:217) ~[?:1.8.0_51]
at java.util.Comparator$$Lambda$42/770739971.compare(Unknown Source) ~[?:?]
at java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:216) ~[?:1.8.0_51]
at java.util.Comparator$$Lambda$42/770739971.compare(Unknown Source) ~[?:?]
at java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:216) ~[?:1.8.0_51]
at java.util.Comparator$$Lambda$42/770739971.compare(Unknown Source) ~[?:?]
我发现两个示例实体的结束日期不同。第一个实体具有非空属性,第二个实体具有空
我认为当一个或两个参数为空时,nullsFirst
比较器可能是空安全的。
我做错了什么?
最佳答案
nullsFirst(...)
返回的比较器返回一个比较器,它处理要比较的一个或两个对象为 null
的情况。
所以当你说 nullsFirst(comparing(MyEntity::getIsoCode))
时,你会得到一个比较器来处理一个或两个 MyEntity
实例都是 null 的情况
并根据它们的自然顺序比较 getIsoCode
属性(不处理 null
值),如果 MyEntity
实例都不是 空
。
你想要实现的是 comparing(MyEntity::getIsoCode, nullsFirst(naturalOrder()))
,指定用于比较的 null
安全比较器属性值。这同样适用于 getEndDate
属性。
您可以将它与 thenComparing
融合到 previousComparator.thenComparing(MyEntity::getIsoCode, nullsFirst(naturalOrder()))
关于java - Comparator.nullsFirst 在两者都为 null 时的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44152312/
如果字段为空,我如何根据日期对列表进行排序? import java.time.LocalDate; import java.time.format.DateTimeFormatter; import
我在 vector 中有以下列表 Class abc{ String view; String viewDesc; } Data: viewDesc = null viewDesc
我想要一个空安全比较器,但它不起作用: Comparator sort_high = (i1, i2)-> Double.compare(i2.getUser().getValue(), i1.get
我有一个包含多个“可选”(不是 java.util.Optional)字段的类。我正在编写一个 Lambda 比较器,通过比较它们属性的一个子集来测试是否相等 我写了 private final st
这可能是一个简单的问题,但我想清楚地理解它...... 我有这样的代码: public final class Persona { private final int id; privat
我是一名优秀的程序员,十分优秀!