Java8 Lambda表达式


Lambda表达式的结构:
    Lambda表达式可以具有零个、一个或多个参数。
    可以显式声明参数的类型,也可以由编译器自动从上下文推断参数的类型,如(int a)与(a)相同。
    参数用小括号括起来,多个参数用逗号隔开,如(a, b)。
    空括号表示一组空的参数,如() -> 11。
    当且仅当一个参数时,如果不显式指明类型,则不必使用小括号,如a -> return a+a。
    Lambda表达式的正文可以包含零条、一条或多条语句。
    如果Lambda表达式正文只有一条语句,则大括号可不用写,且表达式的返回值类型要与匿名函数的返回类型相同。
    如果Lambda表达式正文有一条以上语句,则必须包含在大括号中,且表达式的返回值类型要与匿名函数的返回类型相同。    

Lambda表达式使用语法:
(argument) -> {body}
(arg1, arg2...) -> {body}
(type1 arg1, type2 arg2...) -> {body}
例子:
(int a, int b) -> {return a*b;}
() -> System.out.println("this ") 

Lambda表达式的加入,使得 Java 拥有了函数式编程的能力。在其它语言中,Lambda 表达式的类型是一个函数;但在 Java中,Lambda表达式被表示为对象,因此它们必须绑定到被称为功能接口的特定对象类型。

在 Java 中,功能接口(Functional interface)指只有一个抽象方法的接口。功能接口只能有一个抽象方法。如果我们尝试在其中添加一个抽象方法,则会抛出编译时错误。
java.lang.Runnable是一个功能接口,在 Runnable中只有一个方法的声明void run()。我们使用匿名内部类实例化功能接口的对象,而使用 Lambda 表达式,可以简化写法。

原文地址:https://www.cnblogs.com/myna/p/8065627.html