Lamda属于函数式编程的概念,那么为什么需要函数式的编程呢?
如何要想清楚函数式编程的产生目的,那么我们必须通过匿名内部类来分析。
传统的内名内部类:
package com.wonglar.demo;
interface IMessage{
public void print();
}
public class Demo {
public static void main(String[] args) {
fun(new IMessage() {
@Override
public void print() {
System.out.println("Hello World !");
}
});
}
public static void fun(IMessage msg){
msg.print();
}
}
实际上整个代码当中,我们最终需要的就是一个输出而已,由于java开发的结构性的完整要求,所以不得不在这个核心的语句上嵌套更多的内容。
以上的做法要求的实在过于严谨了,所以在java的1.8时代引入了函数式的编程,可以简化以上的代码。
使用Lamda表达式:
package com.wonglar.demo;
interface IMessage{
public void print();
}
public class Demo {
public static void main(String[] args) {
fun(()->System.out.println("Hello World !"));
}
public static void fun(IMessage msg){
msg.print();
}
}
整个的操作里面匿名内部类只是进行了一行语句的输出,所以使用了Lamda表达式可以非常轻松的实现要求。
对于Lamda语法有三种形式:
- (参数)->单行语句;
- (参数)->{单行语句};
- (参数)->表达式。
有参的单行语句:
package com.wonglar.demo;
interface IMessage{
public void print(String str);
}
public class Demo {
public static void main(String[] args) {
//首先要定义此表达式需要接受的变量,单行语句直接进行输出。
fun((s)->System.out.println(s));
}
public static void fun(IMessage msg){
msg.print("Hello World !");
}
}
多行语句:
package com.wonglar.demo;
interface IMessage{
public void print(String str);
}
public class Demo {
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 !");
}
}
如果说现在代码里面只是一个简单的计算表达式,那么操作也可以很容易。
编写一个表达式:
package com.wonglar.demo;
interface IMessage{
public int add(int x,int y);
}
public class Demo {
public static void main(String[] args) {
//首先要定义此表达式需要接受的变量,单行语句直接进行输出。
fun((num1,num2)->num1+num2);
}
public static void fun(IMessage msg){
System.out.println(msg.add(10,5));
}
}
总结:
利用Lamda表达式最终解决的问题,避免了匿名内部类定义过多无用的操作。