1、概念
Lambda简单来说,就是匿名函数,也就是把一个实现了细节的函数赋值给一个函数式接口(只有一个接口函数需要被实现的接口被称为函数式接口)
2、实际使用
希望各位能通过以下的小项目来更好的理解什么是Lambda及如何去写、去用
FunctionInterface接口类
/**
*
* @FunctionalInterface
* 这个注解表示这个接口是函数式接口,即该接口的方法只能有一个;
* 你问我为什么只能有一个方法,你想想你要怎么用下面的赋值表达式写出两个实现方法的赋值
*
* FunctionInterface lambdaFunctionInterface = (s) -> {
* System.out.println(s);
* };
*
* 你能确定这个Lambda表达式右边的方法实现细节是赋给sayHello呢还是赋给doSomething,
* 在Java8里,Lambda表达式右边的方法名都省略了,怎么指定它的接口方法是谁,
* 所以为了避免这种情况,目前Java8的Lambda表达式的接收类型只能是只有一个方法的接口
*
*/
@FunctionalInterface
public interface FunctionInterface {
void sayHello(String s);
//void doSomething(String s);
}
TestLambda测试类
public class TestLambda {
public static void main(String[] args) {
/**
* 在Java7里,想要实现一个接口的方法并调用这个被实现的方法,
* 首先需要先新建一个实现类(例如本项目里的FunctionInterfaceImpl类),
* 然后该类需要实现某个接口(例如本项目里的FunctionInterface接口类),
* 再然后需要在实现类里补充被实现接口的方法的实现细节,
* 最后,想调用实现了细节的方法,需要先给实现类新建一个对象,把该对象赋给这个实现类的接口类,
* 通过调用接口类的方法从而调用到实现类的实现方法,从而做出某些理想中的运算
*/
class FunctionInterfaceImpl implements FunctionInterface {
@Override
public void sayHello(String s) {
System.out.println(s);
}
}
FunctionInterface functionInterface = new FunctionInterfaceImpl();
functionInterface.sayHello("你好,张三");
/**
* 在Java8的新特性Lambda表达式里,
* Lambda表达式把实现方法的细节直接像变量一样直接赋值给名为lambdaFunctionInterface的FunctionInterface接口,
* 直接省略了新建类,新建对象的过程
*/
FunctionInterface lambdaFunctionInterface = (s) -> {
System.out.println(s);
};
/**
* 如果要用Java7表示,大概如下
*
* FunctionInterface lambdaFunctionInterface = public void sayHello(String s) {
* System.out.println(s);
* }
*/
//单行表达式可以省略{},如下:
//FunctionInterface lambdaFunctionInterface = (s) -> System.out.println(s);
lambdaFunctionInterface.sayHello("你好,李四");
/**
* Lambda表达式虽然简化了实现接口的过程,但Lambda表达式的写法还是太复杂了,所以Java8还有更简单的写法--方法引用
*/
FunctionInterface methodFunctionInterface = System.out::println;
methodFunctionInterface.sayHello("你好,王五");
}
}
创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。