Java - 逆序时编译错误

问题描述 投票:0回答:1

为什么第二次排序会出现编译错误?thx

List<List<Long>> list = Lists.newArrayList();
list.stream().sorted(Comparator.comparing(x -> x.get(0))); //works fine
list.stream().sorted(Comparator.comparing(x -> x.get(0)).reversed()); //cannot work
list.stream().sorted(Collections.reverseOrder(Comparator.comparing(x -> x.get(0)))); //works fine too

我看了ide提示,但看不懂,有人可以用简单易懂的方式解释一下吗?

java sorting lambda compiler-errors reverse
1个回答
1
投票

在这种情况下,由于某种原因,编译器需要类型推断方面的帮助。 要么指定 lambda 参数类型

list.stream().sorted(Comparator.comparing((List<Long> x) -> x.get(0)).reversed());

或将比较器保存在变量中

Comparator<List<Long>> comparing = Comparator.comparing(x -> x.get(0));
    list.stream().sorted(comparing.reversed());

或指定您想要什么类型的比较器:

list.stream().sorted(Comparator.<List<Long>, Long>comparing(x -> x.get(0)).reversed());

这应该让编译器有足够的能力来弄清楚。

泛型有时对此很奇怪,您需要指定具体类型。也许这会在某个时候得到改善,但现在这就是你能做的。

© www.soinside.com 2019 - 2024. All rights reserved.