Как сделать 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())
);
→ Ссылка