可以使用运算符来操纵从Observable到的对象流Subscriber。
Observable<Integer> integerObservable = Observable.just(1, 2, 3); // 创建一个简单的可观察的整数 Subscriber<String> mSubscriber = new Subscriber<String>() { @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<Integer, String>() { @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。