[英]What kind of lambda expression syntax is this in Java 8?
这是关于lambda表达式的一个问题。 我对行check((h, l) -> h > l, 0);
的语法感到困惑check((h, l) -> h > l, 0);
:
check()
函数需要一个Climb对象和一个int。 上面的行不提供任何Climb对象。 h > l, 0
是什么意思?
interface Climb {
boolean isTooHigh(int height, int limit);
}
class Climber {
public static void main(String[] args) {
check((h, l) -> h > l, 0);
}
private static void check(Climb climb, int height) {
if (climb.isTooHigh(height, 1))
System.out.println("too high");
else
System.out.println("ok");
}
}
Climb
接口遵循功能接口的约定,即具有单个抽象方法的接口。
因此,可以使用lambda表达式实现Climb
的实例,即,表达式将两个int作为参数并在此情况下返回布尔值。
(h, l) -> h > l
是实现它的lambda表达式。 h
和l
是参数( int
),它将返回是否h > l
(所以结果确实是一个boolean
)。 所以你可以写一下:
Climb climb = (h, l) -> h > l;
System.out.println(climb.isTooHigh(0, 2)); //false because 0 > 2 is not true
显然, (h, l) -> h > l
是一个lambda表达式,其结果是布尔类型, 0
是check
的第二个参数,它与lambda表达式本身无关; 0
不属于lambda表达式。
(h, l) -> h > l
是爬升物体。 当第一个参数(h)大于第二个参数(l)时,它是一个返回true的lambda。 0
是int,逗号分隔参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.