Я хочу получить повторяющийся код в метод, но не смог найти решение. Метод должен иметь другой тип типа, например String
и Long
, который реализует Comparable, чтобы использовать функцию compareTo()
.
Оригинал:
Comparator<Pair<String, Long>> PAIR_COMPARATOR_FIRST =
(o1, o2) -> o1.getFirst() == null ? o2.getFirst() == null ? 0 : -1 : o2.getFirst() == null ? +1 : o1.getFirst().compareTo(o2.getFirst());
Comparator<Pair<String, Long>> PAIR_COMPARATOR_SECOND =
(o1, o2) -> o1.getSecond() == null ? o2.getSecond() == null ? 0 : -1 : o2.getSecond() == null ? +1 : o1.getSecond().compareTo(o2.getSecond());
Что я пробовал: (не работает)
Comparator<Pair<String, Long>> PAIR_COMPARATOR_FIRST =
(o1, o2) -> nullProfCompare(o1.getFirst(), o2.getFirst());
Comparator<Pair<String, Long>> PAIR_COMPARATOR_SECOND =
(o1, o2) -> nullProfCompare(o1.getSecond(), o2.getSecond());
public static int nullProfCompare(Comparable<T> o1, T o2) {
return o1 == null ? o2 == null ? 0 : -1 : o2 == null ? +1 : o1.compareTo(o2);
}
Я уже много пробовал, как с использованием instanceOf
/ isAssignableFrom
, но ничего не действовало. Как должен выглядеть метод, чтобы принимать только те переменные, которые реализуют Comparable?