如何转换Observable <list <x>&gt;到Observable <list <y>&gt;,使用一个以X为参数的函数&amp;返回Observable <y>

时间:2018-02-24 04:25:47

标签: java rx-java reactive-programming

我有一个方法可以无限期地发送用户ID列表(不是有限的)。

Observable<List<String>> getFriendUserIds()

另一种返回特定用户ID的Account数据的方法。

Observable<Account> getAccount(String userId)

我需要获取getFriendUserIds()方法返回的所有用户id的Account数据,这些数据组合在一个与用户ID列表对应的列表中。

基本上,我需要以下内容,最好采用非阻塞方式。

Observable<List<String>> // infinite stream
===> *** MAGIC + getAccount(String userId) ***  
===> Observable<List<Account>> // infinite stream

示例:

["JohnId", "LisaId"]---["PaulId", "KimId", "JohnId"]------["KimId"]

===>

[<JohnAccount>, <LisaAccount>]---[<PaulAccount>, <KimAccount>, <JohnAccount>]------[<KimAccount>]

排序并不重要,但List<Account>必须包含与Account中存在的每个用户ID相对应的List<String>

**请注意,此问题类似于this question,但还有其他要求将结果项目分组回列表。

1 个答案:

答案 0 :(得分:2)

试试这个:

Observable<List<Account>> accountsList = getFriendUserIds()
.take(1)
.flatMapIterable(list -> list)
.flatMap(id -> getAccount(id))
.toList()
.toObservable();

或者这个:

Observable<List<Account>> accountsList = getFriendUserIds()
.flatMapSingle(list -> 
     Observable.fromIterable(list)
     .flatMap(id -> getAccount(id))
     .toList()
);