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

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

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

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

Ответ 1

Вы можете использовать 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

Ответ 3

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

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