3

ブール値に基づいてオブジェクトを並べ替え、真の値を偽の値の前に並べ替えたいと考えています。

次のcompareToの実装のうち、より読みやすいのはどれですか?

-1 を使用してデフォルトの動作を変更する

public class Example implements Comparable<Example>{

  Boolean isOk;

  public int compareTo(Example o) {
      return -1 * this.isOk.compareTo(o.isOk);
  }

}

または Boolean#compareTo メソッドの側面を交換しますか?

public class ExampleTwo implements Comparable<ExampleTwo>{

  Boolean isOk;

  public int compareTo(ExampleTwo o) {
      return o.isOk.compareTo(this.isOk);
  }

}
4

2 に答える 2

4

最初の形式は単純に間違っています-compareTo戻り値の場合Integer.MIN_VALUE、それを否定しようとするため-そしてInteger.MIN_VALUE再び結果になります。

これを修正する最も簡単な方法は、2番目のスニペットのコードを使用することです。

一方で:

  • isOkがnullの場合、両方が失敗する可能性があります
  • ブール値のみを実際に使用している場合は、単純な真理値表の方が簡単な場合があります
  • 決して戻らない可能性があります。しかし、私はそれに依存しません。Boolean.compareToInteger.MIN_VALUE
于 2010-06-21T11:18:26.957 に答える
3

Guava(以前のGoogleコレクション)のOrderingクラスを使用します。これはを実装しているため、ドロップインの代替として使用できます。Comparator

Ordering<Object> reverseOrdering = Ordering.natural().reverse();
于 2010-06-21T11:20:16.293 に答える