为什么第二次排序会出现编译错误?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提示,但看不懂,有人可以用简单易懂的方式解释一下吗?
在这种情况下,由于某种原因,编译器需要类型推断方面的帮助。 要么指定 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());
这应该让编译器有足够的能力来弄清楚。
泛型有时对此很奇怪,您需要指定具体类型。也许这会在某个时候得到改善,但现在这就是你能做的。