Lamda 属于函数式编程的概念,那么为什么需要函数式的编程呢?
1、首先先看-匿名内部类
public interface IMessage {
public void print();
}
public class TestDemo {
public static void main(String[] args) {
fun(new IMessage() {
@Override
public void print() {
System.out.println("hello");
}
});
}
public static void fun(IMessage msg){
msg.print();
}
}
2、Lamda表达式
public class TestDemo {
public static void main(String[] args) {
fun(()-> System.out.println("hello world"));
}
public static void fun(IMessage msg){
msg.print();
}
}
Lamda表达式是在匿名内部类的基础上出现的,解决匿名内部类繁杂的代码和语法出现的。
Lamda语法的三种形式:
- (参数)-> 单行语句;
- (参数)-> {多行语句};
- (参数)-> 表达式;
第一种:(参数)-> 单行语句;
public interface IMessage {
public void print(String msg);
}
import com.man.java8.interfaceStrong.IMessage;
public class TestDemo {
public static void main(String[] args) {
fun((a) -> System.out.println(a));
}
public static void fun(IMessage msg){
msg.print("hello World!");
}
}
第二种:(参数)-> {多行语句};
public class TestDemo {
public static void main(String[] args) {
fun((a) -> {a=a.toUpperCase();
System.out.println(a);});
}
public static void fun(IMessage msg){
msg.print("hello World!");
}
}
第三种:(参数)-> 表达式;
public interface IMessage {
public int add(int x,int y);
}
public class TestDemo {
public static void main(String[] args) {
//包含了return的功能
fun((x,y) -> x + y);
}
public static void fun(IMessage msg){
msg.add(10,20);
}
}
如果只是一个表达式,那么进行操作的返回,还是不写return比较合适,是多行时要写return。
总结:
利用Lamda表达式最终解决的问题:避免了匿名内部类,过多不用的操作。