Android Lambda表达式
来源:互联网 发布:c语言编译器安卓 编辑:程序博客网 时间:2024/06/03 12:03
Lambda表达式是JAVA8新加入的特性。目的是让代码更少,同时减少我们的工作量。当我们打开一个新的.java文件时会看到编译器自动将某些代码变成了Lambda表达式的形式,那么可以想象成Google更推荐大家使用Lambda表达式进行JAVA代码的书写。那么之前一直是看,能看懂但是没有真正的去使用,今天就完整的给大家写一个如何使用Lambda表达式的帖子,希望大家可以一起学习,一起进步,写出逼格更高,更易读的代码。(Lambda表达式对我们是Rx有很大的帮助)
首先我们看到了Lambda表达式在我们的项目中出现,一点可以展开,这个时候还不是真的Lambda表达式!这个时候只是显示出来而已!当我们真的使用Lambda表达式的时候是需要对我们的项目进行配置的。
第一步加入Lambda表达式插件 在项目的gradle文件中
apply plugin: 'me.tatarka.retrolambda'
在
android{ ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }}
第二步在项目的app/gradle 文件中加入
dependencies { ... classpath 'me.tatarka:gradle-retrolambda:3.2.5' }
做好了这两步的准备工作之后,我们就可以在我们的项目里面使用Lambda表达式了。
例1、用lambda表达式实现Runnable
使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。
使用之前:
new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8, too much code for too little to do"); }}).start();
使用之后
new Thread( () -> System.out.println("Use Lambda , Inner class so easy!") ).start();
那么你可能会问当我们的匿名内部类要是有参数怎么办,别急,我们可以使用(以View举例)
mView.setOnClickListener((View v)->{ });
来实现参数的传递。而多参数的时候可以写成(int p1,int p2,….)->{} 只需要将调用的匿名内部类的方法参数写上就可以了。
例2、使用lambda表达式对列表进行迭代
使用之前
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");for (String feature : features) { System.out.println(feature);}
使用之后 这里的n是我们放到ArrayList中的对象!
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");features.forEach(n -> System.out.println(n));
但是此方法虽然很好用,但是对版本有限制要求。目前在低版本的android中尚未解决。
最后就是很多的Rxjava中的链式结构存在着大量的内部类,这个时候我们使用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); } });
使用后
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中的使用主要是针对内部类的简化!至于其他的使用并不是特别的突出。
- 【Android】Lambda表达式
- 【android】 lambda表达式
- lambda 表达式 android
- Android Lambda表达式
- Android 中使用Lambda表达式
- 在android使用lambda表达式
- Android中使用lambda表达式
- Android中使用lambda表达式
- Android studio使用lambda表达式
- Android Studio 使用Lambda表达式
- Android Studio 使用 Lambda表达式
- Android 中使用lambda表达式
- Android 中使用Lambda表达式
- Android Studio 引入Lambda表达式
- Android 中使用Lambda表达式
- Android 项目使用Lambda表达式
- Android Studio使用Lambda表达式
- android studio 使用lambda表达式
- ubuntu,docker旧版本卸载,脚本安装新版本及boot2docker如何修改docker daemon的启动参数
- POJ
- 用python对两个文本进行相同项筛选
- 分享几条比较好的关于聊天机器人的链接
- 【二叉树】层次遍历二叉树以及判断一棵树是否是完全二叉树
- Android Lambda表达式
- nio filechannel
- selenium之 chromedriver与chrome版本映射表(更新至v2.31)
- 单词匹配(北大ACM)
- 大数据量高并发的数据库优化
- hdu 6054-Is Derek lying?
- Unity_简单工厂设计模式_029
- html格式化,htm代码美化
- 多校6050 Funny Function