菜鸟理解Lamdba表达式

简单的说就是Java 1.8后给出个简化代码的方式,

Java面向对象过分强调必须通过对象的形式来完成任务,而函数思想则尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式做。

举个栗子!

首先创建一个接口

 

package com.mju.band3;

public interface Cook {

public void MakeFood( );

}
接着我们用匿名内部类,Lambda表达式和简化Lambda来玩玩看


//匿名内部类,invokeCook参数是Cook,使用匿名内部类new一个Cook你懂我意思吧?
package com.mju.band3;

public class CookLambda {

public static void main(String[] args) {

invokeCook(new Cook() {
@Override
public void MakeFood() {
System.out.println("吃饭饭");
}
});


//Lambda表达式:括号代表的是Cook的(),有参数那就往里面传参,下面我会有个传参数的例子->代表前面的参数传递给后面的代码,后面的输出语句就是业务逻辑代码
>

invokeCook(()->{
System.out.println("我也吃饭饭");
});
//简化Lambda
1:(参数列表)小括号内的参数类型可以省略
2:(参数列表)括号中的参数如果只有一个,那么参数和类型都可以省略
3:(一些代码)如果{}中代码只有一行,无论有无返回值,都可以省略{},return,分号,不过要注意要省略的话这三个得都省略,不能只省略其中几个,

invokeCook(()-> System.out.println("我也他妈要吃饭饭"));
}


public static void invokeCook(Cook cook){
cook.MakeFood();

}



}

==========================================================================================================================================
再来个有参数例子
package com.mju.band3;

public interface Culator {

public int carulater(Integer a,Integer b);
}




package com.mju.band3;

public class Cualter {
public static void main(String[] args) {
// invokeCul(10, 20, new Culator() {
// @Override
// public int carulater(Integer a, Integer b) {
// return a+b;
// }
// });
invokeCul(10,20,(a,b)->{
return a+b;
});

invokeCul(10,20,(a,b)->a+b);

}

public static void invokeCul(int a,int b,Culator c){
int sum =c.carulater(a,b);
System.out.println(sum);


}
}


最后要注意一下,使用Lambda必须具有接口,且接口中有且只有一个抽象方法
使用Lambda必须具有上下文推断,也就是方法的参数或局部变量必须为Lambda对应的接口类型
才能使用Lambda作为该接口的实例




 



posted @ 2019-07-21 16:25  刘大大的豆得得  阅读(249)  评论(0编辑  收藏  举报
Live2d Test Env