Lamda表达式
1、本次预计讲解的知识点
1、分析函数式编程产生的原因
2、掌握函数式编程的语法。
2、具体内容。
Lamda属于函数式编程的概念,那么为什么需要函数式编程?
如果想清楚函数式编程产生的目的,则必须通过匿名内部类分析
范例:传统的匿名内部类
package cn.mldn.demo; interface IMessage { public void print();//这是一个接口里面原本定义的方法 } public class TestDemo{ public static void main(String[] args){ fun(new IMessage(){ public void print(){ System.out.println("Hello World"); } }); } public static void fun(IMessage msg){ msg.print(); } } |
E:\java>javac -d . TestDemo.java
E:\java>java cn.mldn.demo.TestDemo Hello World
此代码之中,如果fun()方法,最终需要一个输出而已,但是由于java的开发的结构性完整要求,所以不得不在这个核心语句中嵌套更多的内容。
且此代码过于严谨了,所以在JDK1.8时代引入了函数式编程,可以简化以上的代码。 |
范例:使用Lamda表达式
package cn.mldn.demo; interface IMessage { public void print();//这是一个接口里面原本定义的方法 } public class TestDemo{ public static void main(String[] args){ fun(() -> System.out.println("Hello World!!!")); } public static void fun(IMessage msg){ msg.print(); } } |
E:\java>javac -d . TestDemo.java E:\java>java cn.mldn.demo.TestDemo Hello World!!! |
整个操作里面匿名内部类只是进行一行语句的输出,所以此时使用Lamda表达式非常轻松的实现输出要求。
对于Lamda语法三种形式:
·(参数) –>单行语句;·(参数) -> {单行语句}; ·(参数) ->表达式
范例:观察有参的单行语句。
package cn.mldn.demo; interface IMessage { public void print(String str); } public class TestDemo{ public static void main(String[] args){ //首先要定义此处表达式里面接受变量,单行语句直接进行输出 fun((s) -> System.out.println(s)); } public static void fun(IMessage msg){ msg.print("Hello World?!!!");//设置参数内容 } } |
E:\java>javac -d . TestDemo.java
E:\java>java cn.mldn.demo.TestDemo Hello World?!!! |
范例:编写多行语句
package cn.mldn.demo; interface IMessage { public void print(String str); } public class TestDemo{ public static void main(String[] args){ //首先要定义此处表达式里面接受变量,单行语句直接进行输出 fun((s) -> { s = s.toUpperCase();//转为大写 System.out.println(s); }); } public static void fun(IMessage msg){ msg.print("Hello World?!!!");//设置参数内容 } } | E:\java>javac -d . TestDemo.java
E:\java>java cn.mldn.demo.TestDemo HELLO WORLD?!!! |
如果说现在代码里面只是一个简单的计算表达式,那么操作也可以很容易
范例:编写一个表达式
package cn.mldn.demo; interface IMessage { public void add(int x,int y); } public class TestDemo{ public static void main(String[] args){ //首先要定义此处表达式里面接受变量,单行语句直接进行输出 fun((s1,s2) -> s1 + s2); } public static void fun(IMessage msg){ System.out.println(msg.add(10,20));//设置参数内容 } } |
Fun((s1,s2) -> {return s1+s2;});
如果只是一个表达式,那么进行操作返回,还是不写return比较合适,是多行的时候才可以考虑写上return。 |
总结
利用Lamda表达式最终解决的问题,避免了匿名内部类定义过多无用的操作。