您的位置:首页 > 编程语言 > Java开发

RxJava--操作符学习笔记

2016-08-14 21:34 363 查看
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);
}
});
}


输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: