我想基于布尔值对对象进行排序,我想在假值之前对真值进行排序。
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);
}
}
答案 0 :(得分:4)
第一种形式只是错误 - 因为如果compareTo
返回Integer.MIN_VALUE
,它会尝试否定这一点 - 并再次导致Integer.MIN_VALUE
。
解决这个问题的最简单方法就是使用第二个代码段中的代码。
另一方面:
isOk
为空Boolean.compareTo
永远不会返回Integer.MIN_VALUE
。我不会依赖它。答案 1 :(得分:3)
我使用了来自Ordering
class的Guava(以前称为Google Collections),它实现了Comparator
,因此它可以用作替代品:
Ordering<Object> reverseOrdering = Ordering.natural().reverse();