2016-03-21 18 views
3

RxJava kullanarak bir listeden ilk öğeyi almaya çalışıyorum. Ancak, öğe mevcut değilse bir hata atmak istemiyorum. Bunun yerine, varsayılan öğeyi sağlayarak kendimi halledebilmek istiyorum.RxJava, varsa ilk madde

Aşağıda oluşturduğum kod, listedeki ilk öğenin alınmasında doğru şekilde çalışıyor. Buna rağmen, .exists()'u nasıl dahil edeceğimi anlayamıyorum.

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

Herhangi bir yardım için teşekkür ederiz.

cevap

3

bir firstOrDefault operatörü vardır:

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

Ahh, teşekkür ederim! Tam da aradığım şey. – 535A2