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);
}
});
}
输出结果: