【发布时间】:2017-06-08 16:34:34
【问题描述】:
我正在尝试进行 3 个 Web 服务调用(例如:getPhoneNumber、getFirstName、getLastName)并将答案收集到一个公共对象 Person。任何 Web 服务调用都可以返回 Maybe.empty()。
当尝试将zip 一起响应时,rxjava2 会跳过压缩操作并正常终止(没有汇总我的答案)。
有关简化示例,请参见下文:
@Test
public void maybeZipEmptyTest() throws Exception {
Maybe<Integer> a = Maybe.just(1);
Maybe<Integer> b = Maybe.just(2);
Maybe<Integer> empty = Maybe.empty();
TestObserver<String> observer = Maybe.zip(a, b, empty, (x, y, e) -> {
String output = "test: a "+x+" b "+y+" empty "+e;
return output;
})
.doOnSuccess(output -> {
System.out.println(output);
})
.test();
observer.assertNoErrors();
}
我们如何在 zip 操作中收集空值,而不是跳过/忽略 zip 操作?如果这是解决此问题的错误模式,您建议如何解决?
【问题讨论】:
-
使用
defaultIfEmpty给出一个默认值,并在 zip 函数中注意。 -
谢谢@akarnokd。使用
defaultIfEmpty有效。 -
为了支持流结果的
optional性质,我决定使用Maybe<Optional<Integer>> empty = Maybe.just(Optional.empty());,它也可以。
标签: rx-java2