Обратный компаратор в 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
Ответ 2
Интерфейс Java 8 Comparator
имеет reversed
метод: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#reversed--
Ответ 3
Вы также можете использовать Comparator.comparing (Функция, Компаратор)
При необходимости удобно связывать компараторы, например:
Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
.thenComparingInt(SomeEntity::getProperty2)
.thenComparing(SomeEntity::getProperty3, reverseOrder());