RxJava:withLastFrom的使用

在这里插入图片描述
将源Observal发射的数据与目标Observal发射数据的当前最后一个进行组合。

    public final <U, R> Observable<R> withLatestFrom(Observable<? extends U> other, Func2<? super T, ? super U, ? extends R> resultSelector) 

测试:

    public void withlastFrom(){
        Observable<Double> target = Observable.just(4.0, 5.0, 6.0);
        Observable.just(1, 2, 3)
                .withLatestFrom(target, new Func2<Integer, Double, String>() {
                    @Override
                    public String call(Integer integer, Double d) {
                        return "integer = " + integer + ", d = " + d;
                    }
                })
                .observeOn(Schedulers.io())
                .subscribeOn(Schedulers.io())
                .subscribe(s->{
                    System.out.println(s);
                });
    }

输出:

integer = 1, d = 6.0
integer = 2, d = 6.0
integer = 3, d = 6.0

使用时,需要注意,组合以源Observal为中心,就是说,如果源Observable已经发射完成,目标Observal发射的数据不会被处理。
我们给上述target添加发射延时,onNext方法不会收到任何数据:

    @Test
    public void withlastFromDelay() throws InterruptedException {
        Observable<Double> just = Observable.just(4.0, 5.0, 6.0).delay(1,TimeUnit.SECONDS);
        Observable.just(1, 2, 3)
                .withLatestFrom(just, new Func2<Integer, Double, String>() {
                    @Override
                    public String call(Integer integer, Double d) {
                        return "integer = " + integer + ", d = " + d;
                    }
                })
                .observeOn(Schedulers.io())
                .subscribeOn(Schedulers.io())
                .subscribe(new Subscriber<String>() {
                    @Override
                    public void onCompleted() {
                        System.out.println("onCompleted");
                    }

                    @Override
                    public void onError(Throwable e) {
                        System.out.println("onError");
                    }

                    @Override
                    public void onNext(String s) {
                        System.out.println("onNext");
                    }
                });
        Thread.sleep(10 * 1000);
    }

输出:

onCompleted

RxJava提供了withLastFrom的多个重载方法,支持使用多个目标Observable。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值