示例
可以使用运算符来操纵从Observable到的对象流Subscriber。
Observable integerObservable = Observable.just(1, 2, 3); // 创建一个简单的可观察的整数
Subscriber mSubscriber = new Subscriber() {
@Override
public void onCompleted() {
System.out.println("onCompleted叫!");
}
@Override
public void onError(Throwable throwable) {
System.out.println("onError called");
}
@Override
public void onNext(String string) {
System.out.println("onNext调用: " + string);
}
}; // 一个简单的String订阅者
integerObservable
.map(new Func1() {
@Override
public String call(Integer integer) {
switch (integer) {
case 1:
return "one";
case 2:
return "two";
case 3:
return "three";
default:
return "zero";
}
}
}).subscribe(mSubscriber);
输出为:
onNext调用: one
onNext调用: two
onNext调用: three
onCompleted叫!
在map操作者改变了Integer可观察到String可观察到的,由此操作对象的流动。
运算符链
多个运算符可以chained一起使用,以进行更强大的转换和操纵。
integerObservable // 发出1,2,3
.map(i -> i + 10) //每个项目加10;发出11、12、13
.filter(i -> i > 11) //发出满足条件的物品;12、13
.last() //发出可观察到的最后一个物品;13
// 可以添加无限的运算符...
.subscribe(System.out::println); // 版画13
可以在Observable和之间添加任意数量的运算符Subscriber。