1.Lamda表达式的作用
例如一个匿名内部类的使用,使用Lamda表达式可以简化。
package TestDemo;
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();
}
}
package TestDemo;
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();
}
}
图一Lamda表达式和图二的匿名内部类明显是Lamda表达式更加简便。
Lamda就是为了解决匿名类形式过于复杂的作用。
2.Lamda表达式的语法形式:
(参数)->单行语句
(参数)->{多行语句};
(参数)->表达式
范例:观察有参的单行语句:
package TestDemo;
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");
}
}
结果也能输出:
先说明一下,这里匿名内部类用到了接口回调(本质是方法多态性 这里的接口回调类似于Okhttp3里面,网络请求参数的填充),回调方法体就是Lamda表达式这里。
范例:观察多行语句
package TestDemo;
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");
}
}
转大写也成功了:
如果是一个表达式:
package TestDemo;
interface IMessage{
public int add(int number1,int number2);
}
public class TestDemo{
public static void main(String[] args) {
fun((s1,s2)-> s1 + s2);//或者 fun((s1,s2)-> {return s1 + s2;});
}
public static void fun(IMessage msg){
System.out.println(msg.add(10,20));
}
}
结果:
总结:
利用Lamda表达式是对匿名内部类的复杂代码的优化。