使用Lambda和RxJava来简化代码

以扔物线大大的一段代码为例。看看这2货简单代码的能力。

new Thread() {
    @Override
    public void run() {
        super.run();
        for (File folder : folders) {
            File[] files = folder.listFiles();
            for (File file : files) {
                if (file.getName().endsWith(".png")) {
                    final Bitmap bitmap = getBitmapFromFile(file);
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            imageCollectorView.addImage(bitmap);
                        }
                    });
                }
            }
        }
    }}.start();

使用RxJava之后的代码:

Observable.from(folders)
    .flatMap(new Func1<File, Observable<File>>() {
        @Override
        public Observable<File> call(File file) {
            return Observable.from(file.listFiles());
        }
    })
    .filter(new Func1<File, Boolean>() {
        @Override
        public Boolean call(File file) {
            return file.getName().endsWith(".png");
        }
    })
    .map(new Func1<File, Bitmap>() {
        @Override
        public Bitmap call(File file) {
            return getBitmapFromFile(file);
        }
    })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<Bitmap>() {
        @Override
        public void call(Bitmap bitmap) {
            imageCollectorView.addImage(bitmap);
        }
    });

代码量虽然没有减少,但是很明显逻辑更加清晰了。那么,我们在使用Lambda来简化下。

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) });

好吧,看到这里我心动了,程序员都是懒惰的。在这里看来,即使Lambda有他的缺点,但是作为开发人员,还是心动了有木有。

本来想详细的写写记一下笔记来着。但是:在看了网上的几篇博客之后,我竟然没有产生自己的想法,是我捉急了,还是他们博客写的太详细,太好,我想应该是他们写太好的原因。那么我在这就没必要在写了,给出链接,大家自己看去吧。
Lambda表达式:
- 文档
- Lambda表达式入门
- Java8 lambda表达式教程
- java8之Collector
- 深入理解java8 lambda
- 深入探索java8 lambda

RxJava

  • 仍物线大大的文章
  • RxJava doc
  • RxJava文档教程 中文
  • Rx系列github

今天上午死活构建项目的时候下载不下来RxAndroid,后来,换个了项目才好,谁能告诉我这是什么原因。

你可能感兴趣的:(使用Lambda和RxJava来简化代码)