通过observable替换每个double

时间:2017-03-02 21:31:35

标签: java rx-java kotlin reactive-programming

我有两个列表: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>。 我如何替换我的代码以使用反应式编程?

1 个答案:

答案 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(...)