gpt4 book ai didi

java - RxJava 出错后如何继续流式传输项目?

转载 作者:行者123 更新时间:2023-11-30 02:45:14 24 4
gpt4 key购买 nike

我是 RxJava 新手,我遇到了以下问题。假设我有一系列项目,并且其中一个项目传播错误,我想忽略它并继续处理其他项目。

我有以下代码片段:

    Observable.from(Arrays.asList("1", "2", "3"))
.map(x -> {
if (x.equals("2")) {
throw new NullPointerException();
}
return x + "-";
})
.onExceptionResumeNext(Observable.empty())
.subscribe(System.out::println);

我得到:1-

但我想得到:1- , 3-

我怎样才能做到这一点?

最佳答案

诀窍是将值(将以某种方式转换)包装成一个新的可观察值并覆盖它的平面图,如下例所示。 flatMap 中的每个值现在都可以抛出异常并按值进行处理。由于 flatMap 中的子流仅包含一个元素,因此 onError 后是否关闭 observable 并不重要。我使用 RxJava2 作为测试环境。

@Test
public void name() throws Exception {
Observable<String> stringObservable = Observable.fromArray("1", "2", "3")
.flatMap(x -> {
return Observable.defer(() -> {
try {
if (x.equals("2")) {
throw new NullPointerException();
}
return Observable.just(x + "-");
} catch (Exception ex) {
return Observable.error(ex);
}
}).map(s -> {
if (s.equals("3-")) {
throw new IllegalArgumentException();
}
return s + s;
}).take(1)
.zipWith(Observable.just("X"), (s, s2) -> s + s2)
.onErrorResumeNext(Observable.empty());
});

TestObserver<String> test = stringObservable.test();

test.assertResult("1-1-X");
}

关于java - RxJava 出错后如何继续流式传输项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40380757/

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