質問

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

比較のこれらの実装のうち、より読みやすいものはどれですか?

-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);
  }

}
役に立ちましたか?

解決

最初のフォームは単純です 間違い - なぜなら compareTo 戻り値 Integer.MIN_VALUE, 、それはそれを否定しようとします - そして Integer.MIN_VALUE また。

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

一方で:

  • どちらも失敗する可能性があります isOk 無効である
  • あなたが本当にブール人だけを使用している場合、シンプルな真理テーブルはより単純かもしれません
  • これは 可能 それ Boolean.compareTo 二度と戻りません Integer.MIN_VALUE. 。私はそれに頼らないでしょう。

他のヒント

私は使用します Ordering クラス から グアバ (以前 Googleコレクション)、それは実装します Comparator, 、したがって、ドロップインの交換として使用できます。

Ordering<Object> reverseOrdering = Ordering.natural().reverse();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top