Java流调用reversed后出现Cannot resolve method 'get'编译错误的解决
错误原因分析
这是Java泛型类型推断的问题。当你链式调用reversed()时,编译器无法从后续调用中推断出Comparator.comparing()里lambda表达式的参数类型,只能把x默认推断为Object类型——而Object类没有get()方法,因此触发了编译错误。
解决方案
有三种实用的解决方式,按代码简洁度和可读性排序:
方式一:直接指定逆序比较规则
不用先排序再反转,直接在comparing方法中传入逆序比较器,代码更直观:
items.stream() .sorted(Comparator.comparing(x -> x.get(0), Comparator.reverseOrder())) .collect(Collectors.toList());
方式二:显式指定泛型参数
在comparing方法中明确泛型类型,让编译器直接知道x的类型是List<String>:
items.stream() .sorted(Comparator.<List<String>, String>comparing(x -> x.get(0)).reversed()) .collect(Collectors.toList());
方式三:先定义比较器变量再反转
把比较器单独赋值给带明确类型的变量,确保编译器能正确推断类型后,再调用reversed():
Comparator<List<String>> nameComparator = Comparator.comparing(x -> x.get(0)); List<List<String>> sortedItems = items.stream() .sorted(nameComparator.reversed()) .collect(Collectors.toList());
内容的提问来源于stack exchange,提问作者user3310115
相关产品推荐
相关产品推荐

