2013-06-18 3 views
5

は、私は複数のフィールドを持つComplexObjectを持っていると私はこれを言いたい:フィールドxが両方に存在するGuavaのComparisonChainを使用してnullフィールドを特別な方法で処理できますか?

  • 場合、比較・チェーン内の次のcompareに移動します。
  • 両方がnullの場合は、比較チェーンの次のcompareに移動します。
  • 1がnullであり、他は、最後のヌルを入れていない場合

限り、私は

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

ます

を言うことができるようにするので、私は、これを実行するかどうかはわかりません
  1. オブジェクトが両方とも存在し、等しい場合は等しいと見なします。
  2. オブジェクトが両方ともnullの場合、等しいとみなされます。

グアバのComparisonChainまたはOrderingクラスを使用して、私が望むことを達成できる方法はありますか?あるいは、この問題を解決するための良い方法がありますか?

+0

各フィールドのヌルネスのみを気にするかどうかは気になるのですか? –

+0

@EricJablowはい。しかし、より具体的には、まずそれを気にしてから、私は他のことに気をつけます。 EG:次の '.compare'では、' x'の 'name'フィールドに基づいて比較するかもしれません。 –

答えて

8

私のコメントに対するあなたの答えが与えられたら、ブール比較をしてください。

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

そして、あなたの改訂返信与え、あなたのクラスはメソッド

public XType getX() {...} 

を持っているならば、XTypeComparable<XType>を実装することかComparator<XType>を提供することを検討。

+4

ブール値の単純比較メソッドは、あいまいで混乱の原因となる可能性があるため、より明示的に名前が付けられたメソッドの方が非難されています。最後にnullを指定する場合は、compareFalseFirst(c1.getX()== null、c2.getX()== null)またはcompareTrueFirst(c1.getX()!= null、c2 .getX()!= null) –

+0

どのような美しい解決策!ありがとうございました –

関連する問題