
Java需要知道所有变量的类型。在许多lambda中,它可以推断类型,但是在您的第一个代码段中,它无法猜测的类型
s。我认为解决该问题的标准方法是明确声明它:
Comparator<String> c = Comparator.comparing((String s) -> s.split("\s+")[0]) .thenComparingInt(s -> Integer.parseInt(s.split("\s+")[1]));如果您看一下这个答案,它的参数中有类似的类型声明
Comparator.comparing()。
您的方法,显式地给出的类型参数
comparing(),显然也是可行的。
对于您的另一种方法,声明两个比较器,我非常有信心,在这种情况下,Java可以
String像常规一样从分配的左侧进行推断
List <String> =new ArrayList<>();。当您继续调用
thenComparing()相同的表达式时,Java不再能看到左侧的类型是相关的。有点像
intsize = new ArrayList<>().size();这样也可以:
Comparator<String> name = Comparator.comparing(s -> s.split("\s+")[0]); Comparator<String> c = name.thenComparingInt(s -> Integer.parseInt(s.split("\s+")[1]));欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)