Lambda表达式
1. 分析函数式编程产生的原因;
2. 掌握函数式编程的语法
具体内容
Lambda属于函数式编程的概念,那么为什么需要函数式的编程呢
如果要想清楚函数式编程的产生目的,那么必须通过匿名内部类来分析。
interface IMessage{
publicvoid print();
}
public class TestDemo{
publicstatic void main(String[]args) {
fun(newIMessage() {
@Override
publicvoid print(){
System.out.println("Hello!");
}
});
}
publicstatic void fun(IMessagemsg){
msg.print();
}
}
实际上整个代码之中如果fun()方法,最终需要的只是一个输出而已,但是由于java的开发的结构性的完整要求,所以不得不在这个核心的语句上嵌套更多的内容。
以上的做法要求实在是过于严谨了,所以在JDK1.8时代引入了函数式的编程,可以简化以上的代码
示例:使用Lambda表达式
interface IMessage{ public void print(); } public class TestDemo{ public static void main(String[] args) { fun(() -> System.out.println("Hello!")); } public static void fun(IMessage msg){ msg.print(); } }
整个操作里面匿名内部类只是进行的了一行语句的输出,所以此时使用了Lambda表达式非常轻松的实现了我们输出要求。
对于Lambda语法有三种形式;
1.(参数) -> 单行语句;
2.(参数)-> {多行语句};
3.(参数) -> 表达式。
示例:观察有参的单行语句
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("JAVA!"); //设置参数内容 } }
示例:编写多行语句
interface IMessage{ public void print(String str); } public class TestDemo{ public static void main(String[] args) { //首先要定义次数的表达式里面需要接收的变量,单行语句直接进行的输出 fun((s) -> { s = s.toLowerCase(); //转小写 System.out.println(s); s = s.toUpperCase(); //转大写 System.out.println(s); }); } public static void fun(IMessage msg){ msg.print("JAVA!"); //设置参数内容 } }
如果说现在代码里面只是一个简单的计算表达式,那么操作也可以很容易。
interface IMessage{ public int 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)); } }
如果现在只是一个表达式,那么进行操作的的返回,还是不写return比较合适,是多行的时候才可以考虑写上return
总结
利用Lambda表达式最终解决的问题:避免了匿名内部类定义过多的无用操作。