在Android上使用Lambda表达式 - retrolambda插件
来源:互联网 发布:美国中文导航软件 编辑:程序博客网 时间:2024/06/03 18:47
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/53946001 文章出自:薛瑄博客
Java8比较大的一个变化是加入了Lambda表达式,一种紧凑的,传递行为的方式。它可以使你的代码更简洁、逻辑更清晰。特别是用Rxjava的时候,将各种数据变换使用Lambda表达式来简化,可以最大化的减少样板代码,使整个数据流的处理逻辑十分清晰(下面会有个例子)。
retrolambda又是什么呢?它是 Java 5/6/7 中对Java8 Lambda 表达式的非官方兼容方案。因为目前Android的所有版本(除了N Preview),都还不支持java8。
Github上搜索retrolambda,前两个最多星的就是我们的目标了。分别是evant/gradle-retrolambda和orfjackal/retrolambda。他们之间是啥关系呢?简单来说,gradle-retrolambda只是AS的一个gradle插件,他里面也依赖第二个开源库orfjackal/retrolambda。所以这里我们直接选第一个进行配置。
gradle-retrolambda配置
Note: The minimum android gradle plugin is 1.5.0 and the minimum gradle plugin is 2.5.
Step1
下载jdk8(可以与jdk7并存)Step2
修改系统环境变量,设置好JAVA7_HOME和JAVA8_HOME(为了方便下面插件的配置)Step3
修改module下的build.gradle文件,加入以下构建脚本即可(详见:README):
apply plugin: 'me.tatarka.retrolambda'android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }}//这个节点的内容是可选的retrolambda { jdk System.getenv("JAVA8_HOME") oldJdk System.getenv("JAVA6_HOME") javaVersion JavaVersion.VERSION_1_6 jvmArgs '-arg1', '-arg2' defaultMethods false incremental true}
- Step4
在根目录下的build.gradle文件下,添加
可以在evant/gradle-retrolambda或者这里搜索查看最新版本
classpath 'me.tatarka:gradle-retrolambda:3.4.0'
最终整个文件会像这样子:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' classpath 'me.tatarka:gradle-retrolambda:3.2.0' }}allprojects { repositories { jcenter() }}
alternatively,you can use the new plugin syntax for gradle 2.1+
plugins { id "me.tatarka.retrolambda" version "3.4.0"}
- Step5
项目默认是依赖orfjackal/retrolambdav2.3.0版本的retrolambda库:net.orfjackal.retrolambda:retrolambda:2.3.0
,你可以手动更改此依赖(如修改为最新的版本,如果不想修改可以直接跳过这步):
dependencies { // Latest one on maven central retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:+' // Or a local version // retrolambdaConfig files('libs/retrolambda.jar')}
- Step6
执行Gradle Sync Project,稍等AS下载好相关插件及依赖库,就可以开始写Lambda表达式了。
强烈建议你,有空去看看README
下面是一个简单的例子,分别是加入Lambda表达式前后的对比,大家随意感受一下:
没有使用Lambda表达式:
Observable.from(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) .filter(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer % 2 == 0; } }) .map(new Func1<Integer, Integer>() { @Override public Integer call(Integer integer) { return integer * integer; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { System.out.println(integer); } });
加入Lambda表达式后:
Observable.from(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) .filter(integer -> integer % 2 == 0) .map(integer -> integer * integer) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(integer -> System.out.println(integer));
参考:在Android上使用Lambda表达式 - retrolambda插件
Android 中使用Lambda表达式
在 Android 中使用 Java 8 lambda 表达式
- 在Android上使用Lambda表达式 - retrolambda插件
- 在Android上使用Lambda表达式 - retrolambda插件
- Android使用Lambda表达式 - retrolambda插件(优缺点)
- [Gradle Retrolambda]Android Studio使用lambda表达式
- android:在android studio中使用lambda,android lambda,retrolambda
- android studio 使用retrolambda库 让代码支持lambda 表达式
- android lambda使用:Retrolambda Plugin
- Android Studio 添加retrolambda插件,实现Lambda表达式,与RxJava结合
- android Studio Lambda插件(gradle-retrolambda)安装
- android Studio Lambda插件(gradle-retrolambda)安装
- 在android studio 手动添加retrolambda插件
- Android Studio中使用Retrolambda插件
- 在android使用lambda表达式
- android上的JAVA8:使用retrolambda
- android上的JAVA8:使用retrolambda
- 在android上使用Lambda
- retrolambda在Android studio中的使用
- 在Android Studio中使用Lambda表达式
- 浅谈jQuery代码优化之事件委托(事件绑定)——bind()|live()|delegate()|on()|off()|one()方法
- 2016年终总结
- Android系统自带样式(android:theme)
- 状态图
- Qt之高级网络操作
- 在Android上使用Lambda表达式 - retrolambda插件
- 本人的嵌入式职业英文记录 - 第5周
- 欢迎使用CSDN-markdown编辑器
- 用代码生成表
- 笔记
- 【树结构】树链剖分简单分析
- 测试
- 【ISDB】【Brazil】Brazil TV Content Operators
- 关于dedecms 会员中心会员发表文章后无法更新“我的动态”方案