根据Flowable的返回值获取Single并合并结果

时间:2017-12-28 08:34:24

标签: rx-java2

我调用了一个返回Flowable<List<Entity>>的方法。对于此列表中的每个实体,我想调用一个返回关联的Single<AnotherEntity>的方法。然后应将EntityAnotherEntity合并为一个对象,并且所有这些对象都应在列表中返回。

我现在的样子如下:

return playerRepository.getAllPlayers()
    .flatMapIterable(players -> players)
   .map(player -> player.apiId)
   .flatMapSingle(apiId -> statsRepository.getGameLog(apiId))
   .subscribe(
           stats -> { statsEntries.add(stats); }
   );

如何将其更改为符合我要求的清洁解决方案?

1 个答案:

答案 0 :(得分:0)

您并不真正需要中间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 */ }
    );