rx-java 运营商介绍

示例

可以使用运算符来操纵从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。