});
retrolambda 就是将上面面的代码变成下面的编码形式
Observable.from(folders) .flatMap((Func1) (folder) -> { Observable.from(file.listFiles()) }) .filter((Func1) (file) -> { file.getName().endsWith(".png") }) .map((Func1) (file) -> { getBitmapFromFile(file) }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe((Action1) (bitmap) -> { imageCollectorView.addImage(bitmap) });
Java8引入了lambda表达式,让许多开发者激动不已,本文介绍如何在Android上使用lambda。
buildscript { //开始加入 dependencies { classpath 'me.tatarka:gradle-retrolambda:3.1.0' } //结束插入 }
同时要加入plugin声明
apply plugin: 'me.tatarka.retrolambda'
3 . 加入compileOptions,这会让IDE使用用JAVA8语法解析
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
4 . 指定将源码编译的级别,,使用下列代码,会将代码编译到兼容1.6的字节码格式
retrolambda { javaVersion JavaVersion.VERSION_1_6 }
5 . 添加测试代码, 对于只有一个方法的接口,java8中可以使用lambda表达式代替,所以我们熟悉的设定View点击事件的代码,只要这样写就可以了
v.setOnClickListener(v1 -> Toast.makeText(getActivity(), "clicked", Toast.LENGTH_LONG).show());
对比一下之前的代码量,是不是爽爆了?!!
v.setOnClickListener(new View.OnClickListener(View v) { @Override public void onClick(View v) { Toast.makeText(getActivity(), "clicked", Toast.LENGTH_LONG).show() } });
所有代码可以在这里找到:
http://tinyurl.com/qdbae7d