如何从GroupedObservable提取数据并将分组归约为单个对象?
解决RxJava GroupedObservable的归约问题
嘿,你其实已经离正确答案很近啦!GroupedObservable<K, V>本身就是ObservablenamePlayers直接就是一个发射Player对象的Observable,完全不需要额外“提取”——你可以直接对它调用collect这类操作符。
修正后的代码应该是这样的:
o.groupBy(player -> player.getName()) .flatMap(namePlayers -> // namePlayers就是该分组对应的Observable<Player>,直接操作它就行 namePlayers.collect(Result::new, (result, player) -> result.mergeInfoFrom(player)) .flatMapCompletable(result -> { // 如果需要用到分组的名字(也就是player.getName()的结果),可以用namePlayers.getKey() // 比如 result.setPlayerName(namePlayers.getKey()); return writeResultSomeWhere(result); }) );
给你再理清楚逻辑:
groupBy会把原Observable的元素按指定的键(这里是玩家名字)分组,每个分组对应一个GroupedObservable- 这个
GroupedObservable既包含分组的键(通过getKey()获取),同时本身就是发射该分组内所有元素的Observable - 所以你在
flatMap里直接对namePlayers调用collect,就能把整个分组的Player归约成一个Result对象,之后再处理写入操作就好啦
如果你的Result对象需要关联分组的名字,别忘了可以通过namePlayers.getKey()拿到分组的键值,把它也合并到Result里哦。
内容的提问来源于stack exchange,提问作者Alex Kokorin
相关产品推荐
相关产品推荐

