上一篇介绍了环境搭建,并熟悉了初步的使用方式, 要再学习一些其他方法, 如

just: 获取输入数据, 直接分发, 更加简洁, 省略其他回调
from: 获取输入数组, 转变单个元素分发
map: 映射, 对输入数据进行转换, 如大写
flatMap: 增大, 本意就是增肥, 把输入数组映射多个值, 依次分发
reduce: 简化, 正好相反, 把多个数组的值, 组合成一个数据

先来看下代码:

  final String[] mManyWords = {"欢", "迎", "使", "用"};
    final List<String> mManyWordList = Arrays.asList(mManyWords);

    // Action类似订阅者, 设置TextView
    private Action1<String> mTextViewAction = new Action1<String>() {
        @Override
        public void call(String s) {
            mTvText.setText(s);
        }
    };

    // Action设置Toast
    private Action1<String> mToastAction = new Action1<String>() {
        @Override
        public void call(String s) {
            Toast.makeText(MoreActivity.this, s, Toast.LENGTH_SHORT).show();
        }
    };

    // 设置映射函数(把list转化为字符串)
    private Func1<List<String>, Observable<String>> mOneLetterFunc = new Func1<List<String>, Observable<String>>() {
        @Override
        public Observable<String> call(List<String> strings) {
            return Observable.from(strings); // 映射字符串
        }
    };

    // 连接字符串
    private Func2<String, String, String> mMergeStringFunc = new Func2<String, String, String>() {
        @Override
        public String call(String s, String s2) {
            return String.format("%s %s", s, s2); // 空格连接字符串
        }
    };

    // 添加信息(对字符串进行任意修改)
    private Func1<String, String> mModifyFunc = new Func1<String, String>() {
        @Override
        public String call(String s) {
            return s+"--映映"; // 添加信息
        }
    };

Action1就相当于订阅者,代表最终动作, 因而不需要返回值, 并且一个参数
Func1代表使用一个参数的函数, 前面是参数, 后面是返回值,把数据进行封装处理 上面代码就是两个action,分别从toast和textview输出数据 三个func,一个是把两个字符串连接成一个字符串,一个是在字符串的后面添加内容,还有一个返回的是Observable,为了映射字符串

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple);
        ButterKnife.bind(this);

        // 添加字符串, 省略Action的其他方法, 只使用一个onNext.
        Observable<String> obShow = Observable.just("欢迎使用");

        // 先映射, 再设置TextView
        obShow.observeOn(AndroidSchedulers.mainThread())
                .map(mModifyFunc).subscribe(mTextViewAction);

        // 单独显示数组中的每个元素
        Observable<String> obMap = Observable.from(mManyWords);

        // 映射之后分发
        obMap.observeOn(AndroidSchedulers.mainThread())
                .map(mModifyFunc).subscribe(mToastAction);

        // 优化过的代码, 直接获取数组, 再分发, 再合并, 再显示toast, Toast顺次执行.
        Observable.just(mManyWordList)
                .observeOn(AndroidSchedulers.mainThread())
                .flatMap(mOneLetterFunc)
                .reduce(mMergeStringFunc)
                .subscribe(mToastAction);
    }

输入字符串, 添加内容, 输出至控件中显示
输入数组, 单独分发数组中每一个元素, 添加内容, Toast连续显示
输入数组, 映射为单独分发, 并组合到一起, 集中显示

这次使用的是简化代码,因为有时候我们对异常并不是很关心, 只要能catch异常即可, 因此流仅仅关注真正需要的部分
just可以非常简单的获取任何数据, 分发时, 选择使用的线程
map是对输入数据加工, 转换类型, 输入Func1, 对数据进行修改
from是读取数组中的值, 每次单独分发, 并分发多次, 其余类似
flatMap把数组转换为单独分发, Func1内部使用from拆分数组 reduce把单独分发数据集中到一起, 再统一分发, 使用Func2