rx-java - 如果 RxJava 失败,如何恢复映射列表
问题描述
给定以下代码,onErrorResumeNext 方法只会将列表中的错误项替换为“hi”。我将如何让它继续遍历列表的其余部分?
List<Object> list = new ArrayList<>();
list.add("one");
list.add(new Testo());
list.add("two");
list.add("three");
Observable.fromIterable(list)
.map(item -> item.toString())
.onErrorResumeNext(Observable.just("hi"))
.subscribe(item -> System.out.println(item), onError -> System.out.println("error"));
private static class Testo {
@Override
public String toString() {
throw new NullPointerException();
}
}
解决方案
您可以添加内部反应流,因此发生错误时不会终止外部反应流:
Observable.fromIterable(list)
.flatMap((item) -> Observable.just(item)
.map(_item -> _item.toString())
.onErrorResumeNext(Observable.just("hi")))
.subscribe(item -> System.out.println(item), onError -> System.out.println("error"));
推荐阅读
- javascript - 如何在我的用户上下文中尝试使用 onSnapshot?我想获得通知的实时更新(如 facebook 等)
- gradle - Gradle 多项目构建的评估顺序
- elasticsearch - “cluster_uuid”的 Elasticsearch 问题:“_na_”和许可为空
- pytorch - Pytorch 语义分割损失函数
- api - 是否可以获得按最佳匹配排序的多个结果?
- python - 关于 lambda 函数
- r - R 规则:如何将因素与交易联系起来?
- apache-kafka - java.io.IOException:无法将语句写入 batch_layer.test。最新的例外是 Key may not be empty
- latex - 在 Mediawiki 数学扩展中设置处理 unicode
- python - 如何用多个连续的 Conv2D 层替换 keras 中的 Conv2D 层?