compareTo方法的哪种用法更容易理解?

时间:2010-06-21 11:16:03

标签: java compareto

我想基于布尔值对对象进行排序,我想在假值之前对真值进行排序。

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

}

2 个答案:

答案 0 :(得分:4)

第一种形式只是错误 - 因为如果compareTo返回Integer.MIN_VALUE,它会尝试否定这一点 - 并再次导致Integer.MIN_VALUE

解决这个问题的最简单方法就是使用第二个代码段中的代码。

另一方面:

  • 如果isOk为空
  • ,两者都可能失败
  • 如果您真的只使用布尔值,那么简单的真值表可能更简单
  • 可能 Boolean.compareTo永远不会返回Integer.MIN_VALUE。我不会依赖它。

答案 1 :(得分:3)

我使用了来自Ordering classGuava(以前称为Google Collections),它实现了Comparator,因此它可以用作替代品:

Ordering<Object> reverseOrdering = Ordering.natural().reverse();