根据 Flowable 的 return 值获取 Single 并合并结果
Get Single based on return value of Flowable and merge result
我调用了一个 returns 一个 Flowable<List<Entity>>
的方法。对于此列表中的每个实体,我想调用一个 returns 关联 Single<AnotherEntity>
的方法。 Entity
和 AnotherEntity
然后应合并为一个对象,所有对象都应在列表中返回。
我现在拥有的是这样的:
return playerRepository.getAllPlayers()
.flatMapIterable(players -> players)
.map(player -> player.apiId)
.flatMapSingle(apiId -> statsRepository.getGameLog(apiId))
.subscribe(
stats -> { statsEntries.add(stats); }
);
如何将其更改为满足我要求的干净解决方案?
你真的不需要那个中间体 map()
并且你可以将第二个映射的结果映射到包含原始实体的对中:
return playerRepository.getAllPlayers()
.flatMapIterable(players -> players)
.flatMapSingle(player ->
statsRepository.getGameLog(player.apiId)
.map(log -> new BothEntities(player, log))
)
.toList()
.subscribe(
allEntities -> { /* handle the list */ }
);
我调用了一个 returns 一个 Flowable<List<Entity>>
的方法。对于此列表中的每个实体,我想调用一个 returns 关联 Single<AnotherEntity>
的方法。 Entity
和 AnotherEntity
然后应合并为一个对象,所有对象都应在列表中返回。
我现在拥有的是这样的:
return playerRepository.getAllPlayers()
.flatMapIterable(players -> players)
.map(player -> player.apiId)
.flatMapSingle(apiId -> statsRepository.getGameLog(apiId))
.subscribe(
stats -> { statsEntries.add(stats); }
);
如何将其更改为满足我要求的干净解决方案?
你真的不需要那个中间体 map()
并且你可以将第二个映射的结果映射到包含原始实体的对中:
return playerRepository.getAllPlayers()
.flatMapIterable(players -> players)
.flatMapSingle(player ->
statsRepository.getGameLog(player.apiId)
.map(log -> new BothEntities(player, log))
)
.toList()
.subscribe(
allEntities -> { /* handle the list */ }
);