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再次导致。

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

另一方面:

  • isOk如果为空,两者都可能失败
  • 如果你真的只使用布尔值,一个简单的真值表可能更简单
  • 可能永远Boolean.compareTo不会回来Integer.MIN_VALUE。不过我不会依赖它。
于 2010-06-21T11:18:26.957 回答
3

我会使用 Guava 中的类Ordering以前Google Collections),它实现了,所以它可以用作替代品:Comparator

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