Lambda表达式
-
A希腊字母表中排序第十一位的字母,英语名称为Lambda
-
避免内部类定义过多
-
函数式编程的概念
为什么使用Lambda
-
避免内部类定义过多
-
可以让你的代码看起来很间洁
-
去掉一堆没有意义的代码,只留下核心的逻辑。
函数式接口:
-
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
-
对于函数式接口,我们可以通过lambda表达式来创建接口的对象。
lambda表达式的测试代码1:
/* 推导lambda表达式 */ public class TestLambda1 { ? //3.静态内部类 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(); ? //4.局部内部类 class Like3 implements ILike{ ? @Override public void lambda() { System.out.println("i like lambda3"); } } ? like = new Like3(); like.lambda(); ? //5.匿名内部类,没有类的名称,必须借助接口或者是父类 like = new ILike() { @Override public void lambda() { System.out.println("i like lambda4"); } }; ? like.lambda(); ? //6.用lambda简化 like = () ->{ System.out.println("i like lambda5"); }; like.lambda(); ? } ? } ? //1.定义一个函数式接口 interface ILike{ void lambda(); } ? //2.实现类 class Like implements ILike{ ? @Override public void lambda() { System.out.println("i like lambda"); } }
总结:
lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
前提是接口为函数式接口
多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号,
lambda测试代码2
public class TestLambda2 { ? ? ? public static void main(String[] args) { ? ILove love = null; ? // //1.lambda表示简化 // ILove love = (int a) -> { // System.out.println("i love you--->" +a); // }; // // //简化1,参数类型 // love = (a) -> { // System.out.println("i love you--->" +a); // }; ? //简化2,简化括号 // love = a -> { // System.out.println("i love you--->" +a); // }; ? //简化3,去掉花括号 love = a -> System.out.println("i love you--->" +a); ? //总结: //lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。 //前提是接口为函数式接口 //多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号, ? ? ? love.love(521); ? ? } } ? interface ILove{ void love(int a); }
lambda测试代码3:
public class TestLambda2 { ? ? ? public static void main(String[] args) { ? ILove love = null; ? love = (a,b,c) -> { System.out.println("i love you--->" +a); System.out.println("i love you--->too" +a); ? }; ? ? //总结: //lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。 //前提是接口为函数式接口 //多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号, ? ? ? love.love(521,503,265); ? ? } } ? interface ILove{ void love(int a,int b, int c); }