2016-07-05 1 views
3

Давайте это наблюдаемый:RxJava - Как сделать первый элемент списка и вернуть его как Наблюдаемые

Observable<List<UserProfile>> findUser =service.getUserProfiles() 

Как я могу преобразовать его, чтобы он возвращает первый элемент как Наблюдаемые (а не Observable список, содержащий только первый элемент). Я пробовал first() и takeFirst(), но он по-прежнему возвращает список.

ответ

11

Составьте карту!

Observable<List<UserProfile>> findUser = service.getUserProfiles(); 
Observable<UserProfile> firstUser = findUser 
    .filter(list -> !list.isEmpty()) 
    .map(list -> list.get(0)); 
+0

Спасибо. Что произойдет, если 'list.isEmpty()' возвращает true? – znat

+0

В этом случае наблюдаемый наблюдаемый фильтр не будет излучать какие-либо предметы. Поэтому следующее отображение() не будет вызываться, поскольку наблюдаемый фильтр не испускает никаких элементов. – Mehlyfication

3

Без см как там собирается на getUserProfile() подмигнули сложно, но что об этом

@Test 
public void getFirstUser(){ 
    Observable<List<Integer>> findUser =Observable.just(Arrays.asList(1,2,3)); 
    Observable<Integer> user = findUser 
      .flatMap(Observable::from) 
      .first(); 
    user.subscribe(System.out::println); 
}