Лямбда Java8: отсортировать поток в обратном порядке?

У меня есть список, который я хочу заказать в резервном порядке, но я не нашел никакой функции .reversed() в автозаполнении.

 myMenus(user)
                .stream()
                .filter(mps ->  mps.get1PercentageChange() > 0 &&
                                mps.get2PercentageChange() > 0 &&
                                mps.get3PercentageChange() > 0 &
                                mps.get4PercentageChange() > 0)
                .sorted(comparing(mps -> mps.getDailyPercentageChange()))
                .collect(toList());

Я также пробовал:

myMenus(user)
        .stream()
        .filter(mps ->  mps.get1PercentageChange() > 0 &&
                        mps.get2PercentageChange() > 0 &&
                        mps.get3PercentageChange() > 0 &
                        mps.get4PercentageChange() > 0)
        .sorted(comparing(mps -> mps.getDailyPercentageChange()).reversed())
        .collect(toList());

но тогда у меня ошибка компиляции:

Cannot infer type argument(s) for <T, U> comparing(Function<? super T,? 
     extends U>)

Как насчет того, чтобы просто использовать comparing(mps -> -mps.getDailyPercentageChange())?

Holger 01.06.2018 16:43
Сортировка hashmap по значениям
Сортировка hashmap по значениям
На Leetcode я решал задачу с хэшмапой и подумал, что мне нужно отсортировать хэшмапу по значениям.
6
1
6 759
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У Comparator есть метод reversed для получения обратного порядка, поэтому:

.sorted(comparing(mps -> mps.getDailyPercentageChange()).reversed())

должно сработать.

Как насчет использования вместо этого ссылки на метод: .sorted(comparing(Mps::getDailyPercentageChange).reversed()) (где Mps - это тип mps)? Это было бы немного читабельнее.

jub0bs 01.06.2018 17:58

В зависимости от длины имени класса лямбда иногда может быть более лаконичной. Я также предполагаю, что Mps - это не настоящее имя класса, а сокращение.

senjin.hajrulahovic 12.10.2018 21:32
Ответ принят как подходящий

Это проблема вывода типа. Вам нужно будет помочь компилятору.

несколько вещей, которые вы можете попробовать:

.sorted(comparing(T::getDailyPercentageChange).reversed())

или же

.sorted(comparing((T mps) -> mps.getDailyPercentageChange()).reversed())

Где T - тип сравниваемых элементов.

Другие вопросы по теме