lambda表达式
能够用lambda表达式进行简化,必须是函数式接口
函数式接口:在一个接口里面,有且仅有一个抽象方法,可有很多非抽象方法
//1.定义一个函数式接口 interface ILike{ void like(); }
从复杂到简化到lambda表达式的过程:
package thread; public class TestLambda { //3.静态内部类 static class Like3 implements ILike{ @Override public void like() { System.out.println("I like lambda 静态内部类"); } } public static void main(String[] args) { Like2 like2 = new Like2(); like2.like(); Like3 like3 = new Like3(); like3.like(); // 4.局部内部类 class Like4 implements ILike{ @Override public void like() { System.out.println("I like lambda 局部内部类"); } } Like4 like4 = new Like4(); like4.like(); // 5.匿名内部类,没有类的名称,必须借助接口或父类 ILike like5 = new ILike() { @Override public void like() { System.out.println("I like lambda 匿名内部类"); } }; like5.like(); // 6.对匿名内部类进行简化,用lambda简化,只写参数列表和{}里面的方法体 ILike like6 = ()-> {System.out.println("I Like lambda lambda简化");}; like6.like(); } } //1.定义一个函数式接口 interface ILike{ void like(); } //2.外部实现类 class Like2 implements ILike{ @Override public void like() { System.out.println("I like Lambda 外部实现类"); } }
lambda表达式的优化:
最标准的lambda表达式:
public class TestLambda03 { public static void main(String[] args) { Help help = (int a,double b,boolean c)->{ System.out.println(a+" "+b+" "+c); System.out.println("好开心"); }; help.help(1,1.3,true); } } interface Help{ void help(int a,double b,boolean c); }
可以省略{}时:
public class TestLambda02 { public static void main(String[] args) { // 当{}方法体里面只有一行代码时,lambda表达式可省略{}; // 当{}方法有多行代码时,必须要写{} Help help = (int a)-> System.out.println("帮助人数为"+a); /* Help help = (int a)->{ System.out.println("帮助人数为"+a); System.out.println("好开心"); };*/ help.help(1); } } interface Help{ void help(int a); }
()和参数类型可省略的情况
public class TestLambda03 { public static void main(String[] args) { // 参数类型要省略都省略,要不省略都不省略 // 只有一个参数时才可省略()如 当只有一个参数时 // Help help = a->{ // System.out.println(a+" "+b+" "+c); // System.out.println("好开心"); // }; Help help = ( a, b, c)->{ System.out.println(a+" "+b+" "+c); System.out.println("好开心"); }; help.help(1,1.3,true); } } interface Help{ void help(int a,double b,boolean c); }