How to fix 2 observables of different lengths in RxJava

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

+4
source share
1 answer

combineLatest, zip:

return Observable.combineLatest(
    targetIdList,
    KalturaVideoRetriver.getVideoList(BuildPlaylistStep2Activity.this, kalturaPlaylistId),
    (String[] idListOfTarget, KalturaVideo kalturaVideo) -> {
        ...
        return kalturaVideo;
    })

combineLatest zip, .

, targetIdList String[]. combineLatest , .

+8

All Articles