我想基于布尔值对对象进行排序,并且想在错误值之前对真实值进行排序。

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

}

最佳答案

第一种形式是完全错误的-因为如果compareTo返回Integer.MIN_VALUE,它将尝试取反-并再次导致Integer.MIN_VALUE

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

另一方面:

  • 如果isOk为空,则两者都可能失败
  • 如果您真的只使用布尔值,那么一个简单的真值表可能会更简单
  • Boolean.compareTo可能永远不会返回Integer.MIN_VALUE。但我不会依靠它。
  • 关于java - compareTo方法的哪种用法更容易理解?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3084115/

    10-09 04:57
    查看更多