2016-03-21 7 views
3

RxJavaを使用してリストから最初の項目を取得しようとしています。ただし、アイテムが存在しない場合は、エラーをスローする必要はありません。代わりに、私はデフォルトのアイテムを提供することでそれを処理できるようにしたいと思います。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()); 
         } 
        }); 

助けてください。

答えて

3

firstOrDefaultオペレータあり:

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

ああ、ありがとうございました!ちょうど私が探していたもの。 – 535A2