gpt4 book ai didi

rx-java2 - rxjava2 - 如何压缩也许可以是空的?

转载 作者:行者123 更新时间:2023-12-04 12:39:40 27 4
gpt4 key购买 nike

我正在尝试进行 3 个 Web 服务调用(例如: getPhoneNumbergetFirstNamegetLastName )并将答案收集到一个公共(public)对象中 Person .任何 Web 服务调用都可以返回 Maybe.empty() .

当试图 zip一起回复,rxjava2跳过 zip 操作并正常终止(没有汇总我的答案)。

有关简化示例,请参见下文:

@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方法是正确的方法。

为了表示最终是可选的(甚至不使用默认值),我使用了 Java 8 Optional类型来表示。

例如

@Test
public void maybeZipEmptyTest() throws Exception {
Maybe<Optional<Integer>> a = Maybe.just(Optional.of(1));
Maybe<Optional<Integer>> b = Maybe.just(Optional.of(2));
Maybe<Optional<Integer>> empty = Maybe.just(Optional.empty());

TestObserver<String> observer = Maybe.zip(a, b, empty, (x, y, e) -> {
String output = "test: a "+toStringOrEmpty(x)+" b "+toStringOrEmpty(y)+" empty "+toStringOrEmpty(e);
return output;
})
.doOnSuccess(output -> {
System.out.println(output);
})
.test();

observer.assertNoErrors();
}

private String toStringOrEmpty(Optional<Integer> value){
if(value.isPresent()){
return value.get().toString();
}
else {
return "";
}
}

关于rx-java2 - rxjava2 - 如何压缩也许可以是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44441215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com