我有一个方法可以无限期地发送用户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,但还有其他要求将结果项目分组回列表。
答案 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()
);