6

複数のフィールドを持つ ComplexObject があり、これを言いたい:

  • x両方にフィー​​ルドが存在する場合compareは、比較チェーンの次のフィールドに進みます。
  • 両方が null の場合はcompare、比較チェーンの次のチェーンに進みます。
  • 一方が null で、もう一方がそうでない場合は、最後に null を配置します

私が知る限り、これを行う方法がわかりません

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

意思

  1. オブジェクトが両方とも存在し、等しい場合、それらは等しいと見なします
  2. オブジェクトが両方とも null の場合、それらは等しいと見なされます。

グアバComparisonChainまたはOrderingクラスを使用して目的を達成する方法はありますか? または、この問題を解決することを考えるより良い方法はありますか?

4

1 に答える 1

9

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

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

クラスにメソッドがある場合、修正された返信が与えられます

public XType getX() {...}

XTypeを実装Comparable<XType>または提供することを検討してComparator<XType>ください。

于 2013-06-18T22:15:50.620 に答える