Java学习之Lambda表达式的深入理解和使用
1、lambda表达式
-
避免匿名内部类定义过多 其实质是属于函数式编程的概念 (params)-> expression[ 表达式 ] (params)-> statement[语句 ] (params)-> {statements}
2、函数式接口
-
任何接口、如果只包含唯一一个抽象方法,那么它就是一个函数式接口 public interface Runnable{ public abstract void run(); } 对于函数式接口,可以通过lambda表达式来创建该接口的对象
3、演化进程
//函数式接口 public interface Person { void speak(String str); }
//方式一: 接口实现类 class p1 implements Person{ @Override public void speak(String str) { System.out.println(str); } } public class LanmbdaTest { //方式二:静态内部类 static class p2 implements Person{ @Override public void speak(String str) { System.out.println(str); } } public static void main(String[] args) { //方式三:局部内部类 class p3 implements Person{ @Override public void speak(String str) { System.out.println(str); } } Person p1 = new p1(); p1.speak("1"); Person p2 = new p2(); p2.speak("2"); Person p3 = new p3(); p3.speak("3"); //方式四:匿名内部类 Person p4 = new Person() { @Override public void speak(String str) { System.out.println(str); } }; p4.speak("4"); //方式五:lambda表达式 Person p5=(String str)->{ System.out.println(str); }; p5.speak("5"); } }
4、Lambda的简化
public class LambdaTest2 { public static void main(String[] args) { //常态 Person p1 = (String str) -> { System.out.println(str); }; //简化1:去掉类型 Person p2 = (str) -> { System.out.println(str); }; //简化2:去掉括号 Person p3 = str -> { System.out.println(str); }; //简化3:去掉花括号 Person p4 = str -> System.out.println(str); p1.speak("1"); p2.speak("2"); p3.speak("3"); p4.speak("4"); } }
-
总结 lambda 表达式只有一行代码的情况下,才能简化成一行。多行的时候得用{ }包裹 p = str->{ System.out.println(str); System.out.println(str); } lambda表达式才多参数的时候,也可以去掉参数类型,去掉就得都去掉。 lambda表达式只有一个参数的情况下,才能去掉括号。多参数的时候得加上括号 p = (str1,str2)->{ System.out.println(str1); System.out.println(str2); }
上一篇:
IDEA上Java项目控制台中文乱码