2013-06-18 23 views
5

我有多个字段ComplexObject,我想这样说:我可以使用Guava的ComparisonChain以特殊方式处理空字段吗?

  • 如果双方存在场x,移动到下一个compare在比较链。
  • 如果两者均为空,则转到比较链中的下一个compare
  • 如果为空,另一种是没有,最后把空

我不知道如何做到这一点,因为据我可以告诉

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

  1. 如果它们都存在并且相等,则认为对象相等
  2. 如果两个对象都为null,则认为它们相等。

有没有一种方法可以使用番石榴的ComparisonChainOrdering类来实现我想要的功能?或者有更好的方法去思考解决这个问题吗?

+0

你的意思是说你只关心每个领域的无效性? –

+0

@EricJablow是的。但更具体地说,我首先关心,然后我会关心其他事情。 EG:对于下一个'.compare',我可能会根据'x'的'name'字段进行比较。 –

回答

8

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

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

并给予您回复修订,如果你的类有一个方法

public XType getX() {...} 

再考虑做XType实施Comparable<XType>或提供Comparator<XType>

+4

布尔值的简单比较方法现在不赞成使用更明确命名的方法,因为它是模糊的并可能导致混淆。如果你想在问题中指出最后一个空值,你可以使用compareFalseFirst(c1.getX()== null,c2.getX()== null)或compareTrueFirst(c1.getX()!= null,c2 .getX()!= null) –

+0

多么美丽的解决方案!谢谢 –

相关问题