RxJava--操作符学习笔记

    xiaoxiao2025-05-28  8

    Filter

    filter操作符是对源Observable产生的结果按照指定条件进行过滤,只有满足条件的结果才会提交给订阅者。

    其流程图如下:

    代码如下:

    @Test public void filterTest() { //输出日志 ShadowLog.stream = System.out; String[] strings = new String[]{ "q", "w", "", "e", "" }; Observable.from(strings) .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return !TextUtils.isEmpty(s); } }) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.d(TAG, "call: " + s); } }); }

    输出结果为:

    Map

    map函数只有一个参数,参数一般是Func1,Func1 的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据 其流程图如下:

    实效:

    代码如下:

    @Test public void mapTest() { String[] strings = new String[]{ "0", "1", "", "2", "" }; Observable.from(strings) .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return !TextUtils.isEmpty(s); } }) .map(new Func1<String, Integer>() { @Override public Integer call(String s) { return Integer.parseInt(s); } }) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.d(TAG, "call: " + integer); } }); }

    输出结果:

    Zip

    zip操作符是把两个observable提交的结果,严格按照顺序进行合并

    流程图如下:

    代码如下:

    @Test public void zipTest() { String[] strings = new String[]{ "0", "1", "t", "r", "y", "k" }; String[] strings2 = new String[]{ "q", "3", "", "e", "" }; Observable observable1 = Observable.from(strings); Observable observable2 = Observable.from(strings2); Observable.zip(observable1, observable2, new Func2<String, String, String>() { @Override public String call(String o, String o2) { return o + o2; } }) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.d(TAG, "call: " + s); } }); }

    输出结果如下:

    注意输出结果,只输出了5个结果,但是strings数组length为6,所以合并结果的length为最小数组的length

    Merge

    merge操作符是按照两个Observable提交结果的时间顺序,对Observable进行合并

    流程图如下:

    代码如下:

    @Test public void mergeTest() { String[] strings = new String[]{ "0", "1", "", "r", "" }; String[] strings2 = new String[]{ "q", "3", "", "e", "" }; Observable observable1 = Observable.from(strings); Observable observable2 = Observable.from(strings2); Observable.merge(observable1, observable2) .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return !TextUtils.isEmpty(s); } }) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.d(TAG, "call: " + s); } }); }

    输出结果:

    转载请注明原文地址: https://ju.6miu.com/read-1299352.html
    最新回复(0)