Lamda语法
基本
-
λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda
-
避免匿名内部类定义过多
-
可以让你的代码看起来很简洁
-
去掉了一堆没有意义的代码,留下核心的逻辑
-
其实质属于函数式编程的概念
(params)-> expression[表达式] (params) -> statement[语句] (params) -> {statements}
理解Functional interface(函数式接口)是学习java8 lamda表达式的关键所在。
函数式接口的定义:
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
对于函数式接口,我们可以通过lamda表达式来创建该接口的对象
代码推导
/** * 推导lamda表达式 */ //定义一个函数式接口 interface IPerson{ void person(); } interface IMan{ void man(String name); } //定义一个实现类 class PersonFirst implements IPerson{ @Override public void person() { System.out.println("I am a Firstperson"); } } public class Lamda { //静态内部类 static class PersonSecond implements IPerson{ @Override public void person() { System.out.println("I am a Secondperson"); } } public static void main(String[] args) { IPerson person = new PersonFirst(); person.person(); person = new PersonSecond(); person.person(); //局部内部类 class PersonThird implements IPerson{ @Override public void person() { System.out.println("I am a Thirdperson"); } } person = new PersonThird(); person.person(); //匿名内部类 没有类的名称 借助接口或父类 person = new IPerson() { @Override public void person() { System.out.println("I am a Forthperson"); } }; person.person(); //用Lamda简化(无参数) person = ()->{ System.out.println("I am a Fifthperson"); }; person.person(); //用lamda简化(有参数) // IMan man = (String name)->{ // System.out.println(name); // }; // man.man("z"); //简化参数类型 // IMan man = (name)->{ // System.out.println(name); // }; // man.man("z"); //简化括号 // IMan man = name->{ // System.out.println(name); // }; // man.man("z"); //简化{} 代码有多行无法省略{} IMan man = name-> System.out.println(name); man.man("z"); } }