Какое использование метода CompareTo более понятно? - PullRequest
3 голосов
/ 21 июня 2010

Я хочу отсортировать объекты на основе логических значений и хочу отсортировать истинные значения перед ложными значениями.

Какая из этих реализаций CompareTo более читабельна?

Использование -1 для изменения поведения по умолчанию

public class Example implements Comparable<Example>{

  Boolean isOk;

  public int compareTo(Example o) {
      return -1 * this.isOk.compareTo(o.isOk);
  }

}

или поменять местами логический метод # compareTo?

public class ExampleTwo implements Comparable<ExampleTwo>{

  Boolean isOk;

  public int compareTo(ExampleTwo o) {
      return o.isOk.compareTo(this.isOk);
  }

}

Ответы [ 2 ]

4 голосов
/ 21 июня 2010

Первая форма просто неверна - потому что если compareTo вернет Integer.MIN_VALUE, она попытается отрицать это - и снова получит Integer.MIN_VALUE.

Самый простой способчтобы исправить это, просто используйте код из второго фрагмента.

С другой стороны:

  • Оба могут потерпеть неудачу, если isOk равно нулю
  • Есливы на самом деле используете только логические значения, простая таблица истинности может быть проще
  • возможно , что Boolean.compareTo никогда не вернет Integer.MIN_VALUE.Я бы не стал на это полагаться.
3 голосов
/ 21 июня 2010

Я бы использовал Ordering класс из Гуава (ранее Google Collections ), он реализует Comparator, поэтому его можно использовать каквставная замена:

Ordering<Object> reverseOrdering = Ordering.natural().reverse();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...