Java8 lambda:按相反的顺序对流进行排序?

en *_*ris 5 collections lambda functional-programming java-8 java-stream

我有这个列表,我想按保留顺序订购,但我没有.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());
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

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());
Run Code Online (Sandbox Code Playgroud)

但后来我有编译错误:

Cannot infer type argument(s) for <T, U> comparing(Function<? super T,? 
     extends U>)
Run Code Online (Sandbox Code Playgroud)

Ous*_* D. 6

这是一个类型推断问题。你需要帮助编译器。

你可以尝试一些事情:

.sorted(comparing(T::getDailyPercentageChange).reversed())
Run Code Online (Sandbox Code Playgroud)

或者

.sorted(comparing((T mps) -> mps.getDailyPercentageChange()).reversed())
Run Code Online (Sandbox Code Playgroud)

T被比较的元素类型在哪里。


Jea*_*nès 5

Comparator有一个reversed获得反向排序的方法,所以:

.sorted(comparing(mps -> mps.getDailyPercentageChange()).reversed())
Run Code Online (Sandbox Code Playgroud)

应该管用.