Заменяйте двойным для каждого наблюдаемым

У меня есть два списка: List<Foo> и List<Bar> . Для каждого элемента List<Foo> я должен проверить все элементы List<Bar> и установить значение, если оно соответствует. Сегодня я использую этот код:

 fooList.forEach { foo -> barList.forEach { bar -> if(foo.id == bar.id) { bar.name = foo.name } } } return barList 

Я хочу изменить его, потому что теперь у меня есть Observable<Foo> и Observable<Bar> . Как я могу заменить свой код на использование реактивного программирования?

Вы можете собрать Bar s в Map of id, чтобы назвать его и запустить с ним последовательность foo:

 Observable<Bar> bars = ... Observable<Foo> foos = ... bars .toMap(bar -> bar.id, bar -> bar.name) .flatMap(map -> foos.doOnNext(foo -> { String name = map.get(foo.id); if (name != null) { foo.name = name; } }) ) .subscribe(...)