首页新闻找找看学习计划

JAVA8方法引用的问题

0
[待解决问题]
请问这个lambda表达式A为什么可以写成下面B这种方式?
A. Comparator<Integer>sss=(Integer ad,Integer bf)->ad-bf;
B. sss= Comparator.comparingInt(ad -> ad);
迷路的猫的主页 迷路的猫 | 初学一级 | 园豆:193
提问于:2018-03-16 23:26
< >
分享
所有回答(2)
0

都是实现Comparator,比较大小

mioopp | 园豆:206 (菜鸟二级) | 2018-03-19 10:22
0

你想问什么可以把(Integer ad,Integer bf)->ad-bf;赋给Comparator<Integer>sss,和把ad -> ad作为参数吗,
因为Lambda表达式可以从赋值上下文、方法调用上下文(参数和返回值)以及类型转换的上下文中获得目标类型。
赋值上下文:Comparator<Integer>sss=(Integer ad,Integer bf)->ad-bf;要被赋值的是一个Comparator,他的抽象方法是两个参数,一个返回值,而(Integer ad,Integer bf)->ad-bf;正好符合要求,所以可以这样赋值。
方法调用上下文:Comparator.comparingInt(ad -> ad);comparingInt的参数是ToIntFunction类型的,它的抽象方法是这样的int applyAsInt(T value),参数是T,试着返回一个int,而ad -> ad可以满足这个要求,所以可以使用
所以就可以推断出来Lambda表达式的目标类型,可以不可这样使用

流年飞雨 | 园豆:1923 (小虾三级) | 2018-03-21 14:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册