我如何确保RXJava Observable仅发射且恰好发射1件

时间:2019-02-06 15:30:47

标签: rx-java

我有一个用例,我必须验证RXJava Observable只发出1个项目(不多也不少),我知道这是一个异步世界,Observable应该定义一个超时时间以关闭流到那时我们就可以实现可观察到的0或1或更多的发射项目,我遇到的问题与性能和超时值有关,因为它可能会影响我的客户服务。这是我当前的代码,我想对其进行改进以避免在新代码中阻塞语句:

import rx.Observable;
...
Observable<Items> oItems = service.getItems(requestParams);
List resultData = new ArrayList();
oItems .toBlocking().subscribe((arg) -> {
    resultData.add(arg.getId());
}
if (resultData.size() == 1) {
    return Observable.just(resultData.get(0));
}
return Observable.empty();

感谢您的爱意和想法。

1 个答案:

答案 0 :(得分:0)

使用.scan(),它将是:

Observable<Boolean> isOneItemObservable = oItems
    .scan(0, (amount, o) -> amount + 1)
    .map( amount -> amount == 1)