Lamda表达式–切记函数式编程的前提!
理解函数式接口是lambda表达式的关键
函数式接口:
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runnable(){ public abstract void run(); }
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
lambda的演变过程
-
正常实现
-
静态内部类
-
局部内部类
-
匿名内部类
-
lambda优化
-
代码实现
-
package com.lamda; /** * @author 王顺 * @description * @date 2022/8/12 */ @SuppressWarnings("all") public class LamdaTest { //静态内部类 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("i like lambda2"); } } public static void main(String[] args) { //最开始实现方法:外部接口+外部实现类+实现类对象.方法 ILike like = new Like(); like.lambda(); //优化一:静态内部类 like=new Like2(); like.lambda(); //优化二:局部内部类 class Like3 implements ILike{ @Override public void lambda() { System.out.println("i like lambda3"); } } like=new Like3(); like.lambda(); //优化三:匿名内部类 like=new ILike() { @Override public void lambda() { System.out.println("i like lambda4"); } }; like.lambda(); //优化四:lambda优化--由于该接口只会有一个方法,方法名称不要了 //如果有传参,写成like=(int a)->{sout("你好")}; like=()->{ System.out.println("i like lambda5"); }; like.lambda(); } } //接口 interface ILike{ void lambda(); } //实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("i like lambda"); } }
lambda的几种展示缩写方法
-
全写
-
省略参数类型
-
省略参数小括号
-
省略方法体花括号
-
代码实现
-
package com.lamda; interface ILove { void love(int a); } /** * @author 王顺 * @description:实现函数式编程的核心是:存在某个接口,该接口的方法只有一种,所以可以省略很多东西 * (特别的,在这种情况下的接口叫函数式接口) * @date 2022/8/12 */ public class lambdaTest2 { public static void main(String[] args) { //正常实现 ILove love = new Love(); love.love(666); //lambda实现 love = (int a) -> { System.out.println("i love " + a); }; love.love(2); //lambda优化1--去除参数类型,只要参数名称 love = (a) -> { System.out.println("i love " + a); }; love.love(1); //lambda优化2--去除括号 love = a -> { System.out.println("i love " + a); }; love.love(3); //lambda优化3--去除花括号 love = a -> System.out.println("i love " + a); love.love(4); } } class Love implements ILove { @Override public void love(int a) { System.out.println("i love" + a); } }