我正在寻找一种可以比较Java中两个非原始Long
对象的方法。这样的事情:Longs.compare(Long x, Long y)
。由于我还没有在网上找到任何东西,我想知道这样的库是否实现了它。
到目前为止,我将它们与Long.compare(x, y)
进行了比较,但现在我已经意识到x
和y
可以为空,所以有时我可以得到NullPointerException
。< / p>
你知道任何能做到这一点的图书馆吗?
PS:我的需求与此post不同。我想知道x > y
是否x == y
。
答案 0 :(得分:3)
我相信你正在寻找的是来自apache commons的ObjectUtils类。它专门用于处理一般null
- 安全比较。
它的compare()
方法永远不会基于null
输入引发异常,而只是假设
null是...小于非空值。
例如:
System.out.println(ObjectUtils.compare(null, null)); // 0
System.out.println(ObjectUtils.compare(new Long(1), null)); // 1
System.out.println(ObjectUtils.compare(null, new Long(1))); // -1
System.out.println(ObjectUtils.compare(new Long(1), new Long(2))); // -1
答案 1 :(得分:2)
使用Java SE 8尝试:
Comparator<Long> nullsFirstLongComparator = Comparator.nullsFirst(Comparator.naturalOrder());
或
Comparator<Long> nullsLastLongComparator = Comparator.nullsLast(Comparator.naturalOrder());
答案 2 :(得分:0)
文档是您最好的指南。
http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html
请检查public int compareTo(Long anotherLong)
方法。
答案 3 :(得分:0)
最简单的答案是首先检查空值,但您也可以使用Guava的Ordering<T>
,它是Comparator<T>
的扩展,它也支持流畅的构建器样式:
Comparator<Long> nullsFirst = Ordering.natural().nullsFirst();
// there's also a nullsLast()