Как сделать Collections.sort без тернарного оператора if
В коде для сортировки папки Map<String, Integer >воспользовался с Collections.sort. Код работает, сортирует и по ключам и по значениям. Но меня заинтересовало как можно сделать эту же сортировку без тернарного оператора? Возможно ли это?
Collections.sort(list2, (o1, o2) -> o1.getValue()-o2.getValue() != 0
? o1.getValue()-o2.getValue()
: o2.getKey().compareTo(o1.getKey())
);
Ответы (1 шт):
Автор решения: Alex Rudenko
→ Ссылка
Использование разности при сравнении целых чисел не рекомендуется, чтобы избежать ошибок при переполнении, если например в значениях или ключах будут Integer.MIN_VALUE и Integer.MAX_VALUE.
А так, для исключения тернарного оператора здесь напрашивается цепочка компараторов:
Collections.sort(list2, Map.Entry.<Integer, Integer>comparingByValue()
.thenComparing(Map.Entry::getKey, Comparator.reverseOrder())
);
Кроме того, начиная с Java 8, List имеет метод List::sort(Comparator<? super E> c) для сортировки самого себя:
list2.sort(Map.Entry.<Integer, Integer>comparingByValue()
.thenComparing(Map.Entry::getKey, Comparator.reverseOrder())
);