首页 > 解决方案 > 如果 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();
    }
}

标签: rx-javarx-java2reactivex

解决方案


您可以添加内部反应流,因此发生错误时不会终止外部反应流:

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"));

推荐阅读