在Android上使用Lambda表达式 - retrolambda插件
来源:互联网 发布:京东大数据 用户画像 编辑:程序博客网 时间:2024/06/08 08:18
Update: Android Jack编译工具的加入使得我们可以在旧平台上也使用Lambda表达式了,最重要这是官方支持哦,具体内容看我的这篇:《在Android上使用官方Lambda支持 - Android N & Jack工具(兼容旧平台)》
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。所以这里我们直接选第一个进行配置。
- Step1
下载jdk8(可以与jdk7并存) - Step2
修改系统环境变量,设置好JAVA7_HOME
和JAVA8_HOME
(为了方便下面插件的配置) - Step3
修改build.gradle文件,加入以下构建脚本即可(详见:README):
apply plugin: 'me.tatarka.retrolambda'buildscript { repositories { mavenCentral() } dependencies { classpath 'me.tatarka:gradle-retrolambda:3.2.5' }}retrolambda { jdk System.getenv("JAVA8_HOME") oldJdk System.getenv("JAVA7_HOME") javaVersion JavaVersion.VERSION_1_7}android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }}
(注意:若你使用的gradle plugins版本是2.0.0,你应该使用最新的3.3.0-beta4 gradle-retrolambda插件。)
- Step4
项目默认是依赖v2.1.0版本的retrolambda库,你可以手动更改此依赖(如修改为最新的2.3.0版本,如果不想修改可以直接跳过这步):
dependencies { // Latest version 2.3.0 retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:2.3.0' // Or a local version // retrolambdaConfig files('libs/retrolambda.jar')}
- Step5
执行Gradle Sync Project,稍等AS下载好相关插件及依赖库,就可以开始写Lambda表达式了。下面是一个简单的例子,分别是加入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));
是不是感觉代码更加清爽、样板代码更少、整个数据的处理逻辑更加清晰了?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表达式
- POJ 1328 Radar Installation
- 最好的8个Java RESTful框架
- 8. 【对于所有对象都通用的方法】如何正确覆写equals方法
- 成功不要“尽力”而要“借力”
- cocos2dx-js 多层级列表
- 在Android上使用Lambda表达式 - retrolambda插件
- Qt利用QGraphicsScene编写Word排版工具导出PDF
- PHP菜鸟应该如何学好PHP
- BP神经网络的实例一则
- 广州宇信易诚科技有限公司面试题
- 【第三章】 DI 之 3.1 DI的配置使用 ——跟我学spring3
- android音乐播放器之在线播放功能的实现
- 关于单元测试的学习记录
- 最短路之Dijkstra