it-swarm.com.ru

Обратный компаратор в Java 8

У меня есть ArrayList и хочу отсортировать его в порядке убывания. Я использую для этого метод Java.util.stream.Stream.sorted(Comparator). Вот описание в соответствии с Java API:

Возвращает поток, состоящий из элементов этого потока, отсортированных в соответствии с предоставленной переменной Comparator.

эти методы возвращают мне сортировку в порядке возрастания. Какой параметр я должен изменить, чтобы иметь нисходящий порядок? 

26
Guforu

Вы можете использовать Comparator.reverseOrder() , чтобы иметь компаратор, который навязывает обратное к естественному порядку.

Если вы хотите изменить порядок существующего компаратора, вы можете использовать Comparator.reversed() .

Образец кода:

Stream.of(1, 4, 2, 5)
    .sorted(Comparator.reverseOrder()); 
    // stream is now [5, 4, 2, 1]

Stream.of("foo", "test", "a")
    .sorted(Comparator.comparingInt(String::length).reversed()); 
    // stream is now [test, foo, a], sorted by descending length
67
Tunaki

Интерфейс Java 8 Comparator имеет метод reversed: https://docs.Oracle.com/javase/8/docs/api/Java/util/Comparator.html#reversed--

6
Dici

Вы также можете использовать Comparator.comparing (Функция, Компаратор)
При необходимости удобно объединять компараторы, например:

Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
        .thenComparingInt(SomeEntity::getProperty2)
        .thenComparing(SomeEntity::getProperty3, reverseOrder());
1
dim42