簡體   English   中英

Java 8中有哪種lambda表達式語法?

[英]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表達式。 hl是參數( 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表達式,其結果是布爾類型, 0check的第二個參數,它與lambda表達式本身無關; 0不屬於lambda表達式。

(h, l) -> h > l是爬升物體。 當第一個參數(h)大於第二個參數(l)時,它是一個返回true的lambda。 0是int,逗號分隔參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM