Lambda表达式本质上是一种匿名方法,它没有方法名、没有修饰符、没有返回值类型,使得编写代码更加简洁。
只要有一个待实现方法的接口就可以使用Lambda表达式。注意:是只能有一个需要被实现的方法,不是规定接口中只能有一个方法
本质上是将这唯一待实现的方法用来代替接口,或者说是代替在具体业务逻辑代码中实现接口的匿名类。因为既然匿名类需要实现这个接口,而这个接口中又只含有唯一一个需要实现的方法,那么就可以通过此方法直接代替该匿名类了。
例子一:
//开启线程传统写法
new Thread(new Runnable() {
@Override
public void run() {
//具体处理逻辑
}
}).start();
//开启线程 Lambda 表达式
new Thread(() -> {
//具体处理偶偶机
}).start();
例子二:
自定义一个接口,再使用 Lambda 表达式的方式进行实现。
/**
* 定义一个接口
*/
public interface MyListener {
//注意,该方法有返回值,有参数
String doSomething(String a,int b);
}
//Lambda 表达式写法
MyListener myListneer2 = (String a,int b) -> {
return a + b;
};
/*
还可以精简成这样
这里,Java 会自动判断出 a 和 b 的数据类型
*/
MyListener myListener2 = (a, b) -> {
return a + b;
};
假如有一个方法,需要传入 MyListener 接口
public void hello(MyListener mListener) {
String a = "Hello Lambda";
int b = 1024;
String result = mListener.doSomething(a, b);
Log.d(TAG, "hello: " + result);
}
//传统写法
hello(new MyListener() {
@Override
public String doSomething(String a, int b) {
return a + b;
}
});
//Lambda 表达式
hello((a, b) -> {
return a + b;
});
例子参考于第一行代码