I have two observables:
Observable<String[]>
and
Observable<KalturaVideo>
I want to check every KalturaVideo.getId (), it contains in String [], which returns the first observable, and if it contains, then do not give it to sourceList.
So, the first observable emits String [] only once, but the second observable empirizes elements 17 times. How to compose these two observers? Here is my solution:
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 - the list of KalturaVideo that I want to exclude from sourceList, KalturaVideoRetriver.getVideoList - returns sourceList
This solution gives me only one KalturaVideo, but I need 17
source
share