2016-03-21 10 views
3

Ich versuche, den ersten Artikel aus einer Liste mit RxJava zu bekommen. Ich will jedoch nicht, dass es einen Fehler gibt, wenn das Element nicht existiert. Stattdessen möchte ich selbst damit umgehen können, indem ich einen Standardartikel zur Verfügung stelle.RxJava, erste Artikel erhalten, wenn vorhanden

Der Code, den ich unten erstellt habe, funktioniert korrekt beim Abrufen des ersten Elements in einer Liste. Obwohl ich nicht herausfinden kann, wie man .exists() darin einbaut.

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()); 
         } 
        }); 

Jede Hilfe wird geschätzt.

Antwort

3

Es gibt einen firstOrDefault Betreiber:

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

Ahh, danke! Genau das, wonach ich gesucht habe. – 535A2

Verwandte Themen