【问题标题】:RxJava, get first item if existsRxJava,如果存在则获取第一项
【发布时间】:2016-03-21 14:34:58
【问题描述】:

我正在尝试使用 RxJava 从列表中获取第一项。但是,如果该项目不存在,我不希望它引发错误。相反,我希望能够通过提供默认项目来自己处理。

我在下面创建的代码在检索列表中的第一项时可以正常工作。虽然我不知道如何将.exists() 合并到其中。

api.getLibraryEntries(username)
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(new Func1<List<Entry>, Observable<Entry>>() {
                @Override
                public Observable<Entry> call(List<Entry> Entries) {
                    return Observable.from(Entries);
                }
            })
            .first(new Func1<Entry, Boolean>() {
                @Override
                public Boolean call(Entry entry) {
                    return entry.getId() == id;
                }
            })
            .subscribe(
                    new Action1<Entry>() {
                        @Override
                        public void call(Entry entry) {
                            view.showEntry(entry);
                        }
                    },
                    new Action1<Throwable>() {
                        @Override
                        public void call(Throwable throwable) {
                            view.showError(throwable.getMessage());
                        }
                    });

感谢任何帮助。

【问题讨论】:

    标签: java rx-java rx-android


    【解决方案1】:

    有一个firstOrDefault 运算符:

    // ...
    .firstOrDefault(yourDefaultValue, new Func1<Entry, Boolean>() {
        @Override
        public Boolean call(Entry entry) {
            return entry.getId() == id;
        }
    })
    // ...
    

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2019-05-16
      • 2017-04-03
      相关资源
      最近更新 更多