什么是Lambda表达式
Lambda表达式是Java SE 8中包含的一个新的重要功能。它们提供了一种清晰简明的方法来使用表达式表示一个方法接口。 Lambda表达式还改进了Collection库,使其更容易从集合中遍历,过滤和提取数据。此外,新的并发功能提高了多核环境中的性能。
当然在Android工程中直接使用JDK 8编译向下兼容还是有问题,你可以通过 Retrolambda 让使用Lambda表达式的Java 8代码运行在Java 7或更低版本上,让Lambda不再专属于Java 8,提高工程师的逼格。
怎么应用到自己的项目中
- 添加如下一段到到build.gradle中,具体看图。
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
- 把下面一段添加到Module中的 build.gradle中,具体看图。
apply plugin: 'me.tatarka.retrolambda'
- 把下面一段添加到整个工程的build.gradle中,具体看图。
classpath 'me.tatarka:gradle-retrolambda:3.2.0'
- 这样就可以使用Lambda表达式写代码了。
Lambda表达式的使用
代码对比
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setText("lalala");
}
});//原来我们写法
//用Lambda表达式写法
button.setOnClickListener(v -> v.setText("lalala"));
Lambda表达式的例子
(int x, int y) -> x + y //接收x和y两个整形参数并返回他们的和
() -> 66 //不接收任何参数直接返回66
(String name) -> {System.out.println(name);} //接收一个字符串然后打印出来
(View view) -> {view.setText("lalala");} //接收一个View对象并调用setText方法
方法引用
class User{
private String userName;
public String getUserName() {
return userName;
}
...
}
List<User> users = new ArrayList<>();
Comparator<User> comparator = Comparator.comparing(u -> u.getUserName());
Collections.sort(users, comparator);
//我们可以用方法引用替换上面的lambda表达式
Comparator<User> comparator = Comparator.comparing(User::getUserName);