繁体   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