将源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。