2016-05-18 6 views
1

Как подождать другой наблюдаемый результат при преобразовании текущего?RxJava: ждать другого наблюдаемого результата

У меня есть список идентификаторов пользователей (userIdsList), и я должен преобразовать их в карту. В ключе карты представлен userId, а значение - boolean, что указывает, содержит ли userId значение regUsers.

return Observable 
    .<List<Long>>from(userIdsList) 
    .groupBy(id -> id, id -> regUsers.contains(id)); //PROBLEM: regUsers is Observable<List<Long>> 
+0

ах, рег Пользователь наблюдаемый .. один момент –

ответ

1

Немного свернутое решение.

 List<Long> ids = Arrays.asList(1L, 2L, 3L); 
     Observable<List<Long>> regUsers = Observable.just(Arrays.asList(1L, 2L)).cache(); 

     Observable<Long> idsStream = Observable.from(ids).cache(); 
     Observable<Boolean> containsStream = idsStream 
      .concatMap(id -> regUsers.map(regList -> regList.contains(id))); 

     idsStream.zipWith(containsStream, (Func2<Long, Boolean, Pair>) Pair::new) 
      .toMap(Pair::getLeft, Pair::getRight).subscribe(System.out::println); 


    private static class Pair<K, V> { 

    private final K left; 
    private final V right; 

    public Pair(K left, V right) { 
     this.left = left; 
     this.right = right; 
    } 

    public K getLeft() { 
     return left; 
    } 

    public V getRight() { 
     return right; 
    } 
} 
+0

обновленного ответа согласно комментарию в коде о наблюдаемых regUsers –

Смежные вопросы