Android响应式编程开发RxAndroid(4):flatMap

简介: Android响应式编程开发RxAndroid(4):flatMapRxAndroid的map通过Function把一个对象转换为另外一个对象,作为结果输出。

Android响应式编程开发RxAndroid(4):flatMap

RxAndroid的map通过Function把一个对象转换为另外一个对象,作为结果输出。flatMap则可以通俗的理解为把一个集合元素对象拆分成单个元素对象,然后丢给Observer作为输入。例子:

package zhangphil.app;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import java.util.Arrays;
import java.util.List;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Function;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;

public class MainActivity extends Activity {

    //假设一个数据源
    private String TAG = "zhangphil测试";

    private DisposableObserver<String> observer = new DisposableObserver<String>() {

        @Override
        public void onNext(String s) {
            Log.d(TAG, "onNext - Start");
            Log.d(TAG, String.valueOf(s));
            Log.d(TAG, "onNext - End");
        }

        @Override
        public void onComplete() {
            Log.d(TAG, "onComplete");
        }

        @Override
        public void onError(Throwable e) {
            Log.e(TAG, e.toString(), e);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String[] source = {"zhang", "phil", "@", "csdn"};
        List<String> lists = Arrays.asList(source);

        Observable
                .just(lists)
                .subscribeOn(Schedulers.io())//执行任务的线程
                .observeOn(AndroidSchedulers.mainThread())//回调发生的线程
                .flatMap(function)
                .subscribe(observer);
    }

    // 设置映射函数
    private Function<List<String>, Observable<String>> function = new Function<List<String>, Observable<String>>() {
        @Override
        public Observable<String> apply(List<String> lists) {
            String[] strs = new String[lists.size()];
            for (int i = 0; i < lists.size(); i++) {
                strs[i] = lists.get(i).toUpperCase();
            }
            return Observable.fromArray(strs);
        }
    };
}


代码运行结果输出:

03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - Start
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: ZHANG
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - End
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - Start
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: PHIL
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - End
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - Start
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: @
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - End
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - Start
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: CSDN
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onNext - End
03-02 10:31:06.606 18037-18037/zhangphil.app D/zhangphil测试: onComplete


附录:
1,《Android响应式编程RxAndroid(1):简单例程》链接地址:http://blog.csdn.net/zhangphil/article/details/58593782  
2,《Android响应式编程开发RxAndroid(2):简单例程的Android改造 》链接地址:http://blog.csdn.net/zhangphil/article/details/58597372
3,《Android响应式编程开发RxAndroid(3):map》链接地址:http://blog.csdn.net/zhangphil/article/details/59130641

相关文章
|
9天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
2天前
|
Java Android开发
Android开发--Intent-filter属性详解
Android开发--Intent-filter属性详解
|
2天前
|
物联网 Java 开发工具
安卓应用开发:打造未来移动生活
【5月更文挑战第10天】 随着科技的飞速发展,智能手机已成为我们日常生活中不可或缺的一部分。作为智能手机市场的两大巨头,安卓和iOS分别占据了一定的市场份额。在这篇文章中,我们将重点关注安卓应用开发,探讨如何利用先进的技术和创新思维,为用户打造更加便捷、智能的移动生活。文章将涵盖安卓应用开发的基本概念、关键技术、以及未来发展趋势等方面的内容。
|
4天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
11 0
|
5天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
16 1
|
5天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
13 0
|
6天前
|
Android开发
Android 盒子开发过程中遇到的问题及解决方法
Android 盒子开发过程中遇到的问题及解决方法
8 2
|
6天前
|
机器学习/深度学习 算法 Android开发
安卓应用开发:打造高效通知管理系统
【5月更文挑战第6天】 在现代移动应用的海洋中,用户经常面临信息过载的挑战。一个精心设计的通知管理系统对于提升用户体验至关重要。本文将探讨在安卓平台上如何实现一个高效的通知管理系统,包括最佳实践、系统架构设计以及性能优化技巧。通过分析安卓通知渠道和优先级设置,我们的目标是帮助开发者构建出既能吸引用户注意,又不会引发干扰的智能通知系统。
18 2
|
7天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
12天前
|
存储 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第30天】在移动开发领域,尤其是安卓平台上,内存管理是影响应用性能和用户体验的关键因素。由于安卓设备的硬件资源有限,不合理的内存使用会导致应用响应缓慢、消耗过多电量甚至崩溃。本文将探讨针对安卓平台的内存优化技巧,旨在帮助开发者提高应用的性能和稳定性,从而提升用户满意度。我们将详细讨论内存泄漏的预防、合理的内存分配策略以及高效的内存回收方法。