Lambda表达式是JAVA最重要的新特性,在学习之前有两个概念需要了解
- 函数式接口
java8提供一个新的注解@FunctionalInterface,用于标注函数式接口,此类接口只能包含一个抽象方法。 - Lambda表达式
Lambda表达式由三部分构成:参数列表、箭头、一个表达式或语句块。
举例:
Lambda本质上是一个匿名方法
public int add(int x, int y) { return x + y; }
转成Lambda写法
(int x,int y) -> x+y ;
类型可以省略,java会根据上下文自动推断出类型
(x,y) -> x+y ;
//或者(x,y) –>{return x+y;};
Lambda表达式和函数式接口的结合
- 新建无参数式接口
- 新建包含属性为函数式接口的类
public class TestJava8{ //匿名内部类 InterfaceWithNoParam param1 = new InterfaceWithNoParam() { @Override public void run() { System.out.println("通过匿名内部类实现run()"); } }; //Lambda表达式 //空括号表示无参 InterfaceWithNoParam param = () -> System.out.println("通过Lambda表达式实现run()") ; }
@FunctionalInterface public interface InterfaceWithNoParam { void run(); }
其他形式的函数式接口及实现
- 有参无返回值
InterfaceWithParams params1 = (String s) -> System.out.println("通过" + s + "实现run(String)"); - 无参有返回值
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam1 = () -> "Hello Lambda!"; - 有参有返回值
InterfaceUnVoidWithParams interfaceWithParams1 = (Integer integer) -> String.valueOf(integer);