如何在Java中比较两个非原始的Long?

时间:2015-10-12 15:10:51

标签: java

我正在寻找一种可以比较Java中两个非原始Long对象的方法。这样的事情:Longs.compare(Long x, Long y)。由于我还没有在网上找到任何东西,我想知道这样的库是否实现了它。

到目前为止,我将它们与Long.compare(x, y)进行了比较,但现在我已经意识到xy可以为空,所以有时我可以得到NullPointerException。< / p>

你知道任何能做到这一点的图书馆吗?

PS:我的需求与此post不同。我想知道x > y是否x == y

4 个答案:

答案 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()