本文主要分以下几个模块:
- 什么是lambda
- Android如何使用
- lambda语法和结构
- demo
================================================================
1.什么是lambda
Lambda 表达式,也被称为闭包,是为开发者提供用简单和紧凑的方式表示数据的匿名函数。
Lambda是一种匿名表达式,retrolambda使得Android能使用lambda特性
2.Android如何使用
在android中是使用Retrolambda的gradle插件,就能在代码中使用lambda了。
- Android Studio配置Retrolambda
Android Studio自动生成lambda
Android Studio配置Retrolambda
(1).lambda需要安装JDK8,最新版本下载地址点这里:jdk-8u91
(2).build.gradlebuildscript {
repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' //加上下面这句依赖,会使用retrolambda来编译Java代码 classpath 'me.tatarka:gradle-retrolambda:3.2.4' }
}
(3).app/build.gradle
apply plugin: ‘com.android.application’
apply plugin: ‘me.tatarka.retrolambda’//加上这句加,入plugin声明
android {
……
compileOptions {//使用JAVA8语法解析
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
retrolambda {//指定将源码编译的级别,使用下列代码,会将代码编译到兼容1.6的字节码格式
javaVersion JavaVersion.VERSION_1_6
}Android Studio自动生成lambda
1.当配置Retrolambda成功后,Android Studio会有提示,按Alt+Enter键
2.点击替换,这样就能自动生成,使用lambda了。
3.lambda语法和结构
语法结构
input -> body
intput种类
- 无输入 void
() -> body
new Thread(new Runnable() {
@Override
public void run() {
Log.d("test", "retrolambda表达式");
}
});
//使用lambda表达式
new Thread(() -> Log.d("test", "retrolambda表达式"));
- 一个参数输入
x -> body
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("test", "retrolambda表达式");
}
});
//使用lambda表达式
view.setOnClickListener(v -> Log.d("test", "retrolambda表达式"));
- 多个参数输入
(x, y) -> x + y;
List<String> names = Arrays.asList("张三", "李四", "王二", "麻子");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
Log.d("test", name.toString());
//使用lambda表达式
List<String> names = Arrays.asList("张三", "李四", "王二", "麻子");
Collections.sort(names, (a, b) -> b.compareTo(a));
Log.d("test", name.toString());
- 不省略型別
(int x, int y) -> x + y;
body 种类
啥都没做
() -> {}
单行没有返回值,单行可省略{}
(x, y) -> x + y;
单行有返回值,单行可省略{}
//注意没有分号结尾
(x, y) -> x + yObservable.just("test", "lambda") .map(new Func1<String, String>() { @Override public String call(String s) { return s.toUpperCase(); } }); //使用lambda表达式 Observable.just("test", "lambda") .map(s -> s.toUpperCase());
多行不需要有返回值
(a, b) ->{
int x = 0 ;
int y = 1;
Log.d("test", x+y);
}多行需要有返回值
(a, b) ->{
int x = 0 ;
int y = 1;
return x+y;
}