У меня есть список, который я хочу заказать в резервном порядке, но я не нашел никакой функции .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>)

У Comparator есть метод reversed для получения обратного порядка, поэтому:
.sorted(comparing(mps -> mps.getDailyPercentageChange()).reversed())
должно сработать.
Как насчет использования вместо этого ссылки на метод: .sorted(comparing(Mps::getDailyPercentageChange).reversed()) (где Mps - это тип mps)? Это было бы немного читабельнее.
В зависимости от длины имени класса лямбда иногда может быть более лаконичной. Я также предполагаю, что Mps - это не настоящее имя класса, а сокращение.
Это проблема вывода типа. Вам нужно будет помочь компилятору.
несколько вещей, которые вы можете попробовать:
.sorted(comparing(T::getDailyPercentageChange).reversed())
или же
.sorted(comparing((T mps) -> mps.getDailyPercentageChange()).reversed())
Где T - тип сравниваемых элементов.
Как насчет того, чтобы просто использовать
comparing(mps -> -mps.getDailyPercentageChange())?