我有两个列表: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>
。
我如何替换我的代码以使用反应式编程?
答案 0 :(得分:4)
您可以将Bar
收集到Map
的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(...)