[英]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.