我有两个可观察者:
Observable<String[]>
和
Observable<KalturaVideo>
我想检查每个KalturaVideo.getId(),它是否包含在String []中,它返回第一个observable,如果它包含,则不要在 sourceList 中发出它
所以,第一个可观察的emmits String []只有一次,但第二个可观察的emmits项目17次。如何恰当地组合这两个可观测量? 这是我的解决方案:
private Observable<KalturaVideo> getSourceListObservalbe(String kalturaPlaylistId){
Observable<String[]> targetIdList = Observable.just(targetList)
.map((List<KalturaVideo> kalturaVideos) -> {
if(kalturaVideos == null || kalturaVideos.isEmpty()){
return new String[]{""};
}
String[] result = new String[kalturaVideos.size()];
int index = 0;
for (KalturaVideo item : kalturaVideos) {
result[index] = item.getId();
}
return result;
});
return Observable.zip(
targetIdList,
KalturaVideoRetriver.getVideoList(BuildPlaylistStep2Activity.this, kalturaPlaylistId),
(String[] idListOfTarget, KalturaVideo kalturaVideo) -> {
for (String item :idListOfTarget){
if(item.equals(kalturaVideo.getId())){
return null;
}
}
return kalturaVideo;
})
.filter(kalturaVideo -> {
return kalturaVideo != null;
});
}
targetList - 我要从 sourceList , KalturaVideoRetriver.getVideoList 中排除的KalturaVideo列表 - 返回 sourceList
这个解决方案只给我一个KalturaVideo,但我需要17个
答案 0 :(得分:8)
您可以使用combineLatest
而不是zip
:
return Observable.combineLatest(
targetIdList,
KalturaVideoRetriver.getVideoList(BuildPlaylistStep2Activity.this, kalturaPlaylistId),
(String[] idListOfTarget, KalturaVideo kalturaVideo) -> {
...
return kalturaVideo;
})
combineLatest
的工作方式与zip
类似,但它结合了每种情况的最新发布。
因此,在您的情况下,您的targetIdList
观察点会发出一个String[]
。 combineLatest
会将其与您的其他可观察物的每次发射相对应。