Lambda表达式
-
λ希腊字母表中排序第十一位的字母,英语名称为Lambda
-
避免匿名内部类定义过多
-
其实质属于函数式编程的概念
(params) -> expression[表达式] (params) -> statement[语句] (params) ->{statemsnts} a -> System.out.println("i liek lambda-->"+a) new Thread (()->System.out.println("多线程学习。。。"))
-
为什么要使用lambda表达式
-
避免匿名内部类定义过多
-
可以让你的代码看起来很简洁
-
去掉了一堆没有意义的代码,只留下核心的逻辑。
-
-
理解Functional Interface(函数式接口)是学习Java8 lambda表达式的关键所在
-
函数式接口的定义:
-
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数时接口
public interface Runnable{ public abstract void run(); }
-
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
-
实例一
public class Teselambda{ //3.静态内部类 static class Like1 implements ILike{ @Override public void lambda() { System.out.println("I Like lambda1"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); ILike like1 = new Like1(); like1.lambda(); //4.局部内部类 class Like2 implements ILike{ @Override public void lambda() { System.out.println("I Like lambda3"); } } ILike like2 = new Like2(); like2.lambda(); //5.匿名内部类,没有类的名称,必须借助接口或者父类 like = new ILike(){ @Override public void lambda() { System.out.println("I like Lambda4"); } }; //6.用lambda简化 like = ()-> { System.out.println("I like Lambda5"); }; } } //1.定义一个函数式接口 interface ILike{ void lambda(); } //2.实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("I Like Lambda"); } }
示例二
public class TestLambda02 { 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); // System.out.println("i love you-->"); // }; //简化3.去掉花括号 love =a -> System.out.println("i love you-->"+a); love.love(520); } } interface ILove{ void love(int a); }
总结:
-
lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹(见示例二中简化二)
-
前提是接口为函数式接口
-
多个参数也可以去掉参数类型,要去掉都去掉(实例三)
实例三
public class TestLambda03 { public static void main(String[] args) { Love love = null; love = (a,b,c)->{ System.out.println("a"+a+"b"+b+"c"+c); }; love.love(1,2,3); } } interface Love{ void love(int a,int b,int c); }