这一段时间看了Java 8上的函数式编程,于是想在Anroid上也通过Java 8来编写应用。不过目前Android只支持Java 7。Java 8中的lambda以及stream等等都不能应用。
不过总归是有有缘人将这部分特性带到了Anroid开发上。
retrolambda
retrolambda是一个可以让Java 8之前版本也能应用lambda表达式的库。它带来了lambda表达式、函数引用以及try-with-resources语句的支持。
在Anroid Studio中配置retrolambda
- 修改Anroid Studio项目工程下的build.gradle文件,增加classpath 'me.tatarka:gradle-retrolambda:3.1.0'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'me.tatarka:gradle-retrolambda:3.1.0'
}
}
- 修改app/build.gradle文件,增加如下内容
apply plugin: 'me.tatarka.retrolambda'
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
retrolambda {
javaVersion JavaVersion.VERSION_1_6
}
}
在代码中使用lambda表达式
在进行如上配置之后,代码中就可以直接使用lambda表达式了,比如注册按钮点击事件,
view.setOnClickListener(view -> Toast.makeText(context, "hello lambda", Toast.LENGTH_SHORT).show());
stream support
retrolambda并没有引入Java 8中的stream接口,不过在其项目页面上给出了一个支持stream的项目链接,streamsupport。
通过使用streamsupport这个包,在Android代码中也可以使用Stream接口,不过和Java 8的Stream接口相比,还是有些地方有出入。
import java8.util.stream.Collectors;
import java8.util.stream.StreamSupport;
...
StreamSupport.of(1, 2, 3).map(x -> x + 1).collect(Collectors.toList());
除了streamsupport这个库之外,另外也发现一个项目做了类似的事情,Lightweight Stream API。
总结
有些事情如果大厂做了,那么能惠及所有人。但如果他们没做,也总归会有有缘人出来把这个事情做了。
Google已经宣布不再支持Eclipse ADT了,Android Studio终于能够作为官方钦定的开发工具了。不过自己对Gradle这个东西一直都没能熟悉起来,看来是有必要仔细学习下。略微跑题,anyway,折腾一番后总算在Android上愉快的使用lambda与stream了。