質問
ブール値に基づいてオブジェクトを並べ替えたいと思っており、偽の値の前に真の値をソートしたいと思います。
比較のこれらの実装のうち、より読みやすいものはどれですか?
-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();
所属していません StackOverflow