【问题标题】:Java8 lambda: sort a stream in reverse order?Java8 lambda:以相反的顺序对流进行排序?
【发布时间】:2018-11-11 17:48:48
【问题描述】:

我有这份清单,我想在保留订单中订购,但我在自动完成辅助中没有找到任何 .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 -&gt; -mps.getDailyPercentageChange())怎么样?

标签: lambda collections java-8 functional-programming java-stream


【解决方案1】:

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

你可以尝试几件事:

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

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

其中T 是要比较的元素的类型。

【讨论】:

    【解决方案2】:

    Comparators 有一个reversed 方法来获取逆序,所以:

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

    应该可以。

    【讨论】:

    • 如何改用方法引用:.sorted(comparing(Mps::getDailyPercentageChange).reversed())(其中Mpsmps 的类型)?那会更具可读性。
    • 根据类名的长度,lambda 有时会更简洁。我还假设Mps 不是实际的类名,而是一个首字母缩略词。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多