我可以使用Guava的ComparisonChain以特殊方式处理空字段吗?

时间:2013-06-18 22:07:32

标签: java guava comparator comparisonchain

我有一个包含多个字段的ComplexObject,我想这样说:

  • 如果两者都存在字段x,请转到比较链中的下一个compare
  • 如果两者都为null,则转到比较链中的下一个compare
  • 如果一个为null而另一个为null,则将空值设为最后

我不知道该怎么做,因为据我所知

.compare(c1.getX(), c2.getX(), Ordering.arbitrary().nullsLast())

  1. 如果对象存在并且相等,则认为对象是相等的
  2. 如果对象都是null,则认为对象是相等的。
  3. 有没有办法可以使用Guava的ComparisonChainOrdering课来实现我的目标?或者有更好的方法来考虑解决这个问题吗?

1 个答案:

答案 0 :(得分:9)

鉴于你对我的评论的回答,只需做一个布尔比较。

.compare(c1.getX() == null, c2.getX() == null)

如果您的班级有方法

,则根据您的修改回复
public XType getX() {...}

然后考虑XType实施Comparable<XType>或提供Comparator<XType>