【Android】Lambda表达式
本文主要分以下几个模块:
- 什么是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;
}
4.Demo
gitHub
更多相关文章
- android ViewModelProviders被弃用解决方案
- Ubuntu下查找.android/avd
- Design Widget
- TabWidget/TabHost的两种使用方法
- 极光推送的使用
- 查看基于Android(安卓)系统单个进程内存、CPU使用情况的几种方法
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用