2015-07-22 3 views
1

Java имеет inteface Comparator<T>, который имеет способ int compare(T o1, T o2).Более элегантный способ сравнения объектов в Java

РЕДАКТИРОВАТЬ:

Я был неправильно с этим:

Возвращенное целое число должно быть -1, если первый объект меньше, чем второй, 1, если второй из них меньше, чем первый, 0 если они равны .

Документов состояние:

отрицательное целое число, нуль или положительное целое число в качестве первого аргумента меньше, равно или больше второго.

Так я перефразировать мой вопрос: Есть ли более элегантный способ сравнения объектов, чем иметь в виду, что comparator.compare(o1, o2) < 0 на самом деле означает, что первый объект меньше, чем второй?

+3

Вопрос из 3 констант. Не можете ли вы просто объявить их в любом файле Util? –

+2

Почему бы вам не объявить их сами? – Sweeper

+1

Возвращаемое значение не равно 1 или -1 - это случай не равного целочисленного числа. Возвращаемое значение - это положительное число или отрицательное число. Нет констант из «положительных» чисел или «отрицательных». –

ответ

5

Сравните ваше заявление

Возвращается целое число должно быть -1, если первый объект меньше, чем второй, 1, если второй один меньше, чем первый, 0, если они равны.

с официальным заявлением

Возвращает отрицательное число, ноль или положительное целое число, как первый аргумент меньше, равен или больше второго.

и обратите внимание, что единственная соответствующая константа равна нулю.

-1

Официальный контракт интерфейс для сравнения метода:

Возвращает отрицательное число, ноль или положительное целое число, как первый аргумент меньше, равен или больше второго.

Хотя на самом деле все, что вам нужно, это три значения, эта логика может быть использована, чтобы написать элегантный код, как это:

public int compare(MyObject o1, MyObject o2){ 
    return o1.getIntValue() - o2.getIntValue(); 
} 

Что в одной строке не только дает вам, какой объект больше (или равно), он даже дает вам, насколько он больше другого.

(Целочисленные перетоки не рассматриваются.)

+1

Java предоставил 'Integer.compare', чтобы пользователи больше не нуждались в этом. Также обратите внимание, что OP сравнивает _объекты_, а не целые числа. –

+1

Это не изящно, потому что это багги. Вы написали, что это багги, но это не делает его лучше. Вы никогда не узнаете, с какими ценностями вызывается такой метод, поэтому вам лучше избегать переполнения, особенно когда все так просто. – maaartinus

Смежные вопросы