如何将每个元素的api调用与rxjava的list调用结合起来

时间:2017-06-14 16:37:22

标签: android rx-java retrofit2

我有2种api方法。

@POST("/api/photos/")
Single<List<Photo>> getPhotos();

@POST("/api/user/profile")
Single<Profile> getProfile(@Query("photoId") String photoId);

我想要返回Single&lt;列表&lt;对&lt;照片,档案&GT;&GT;&GT;在结合一些rx操作和这个api方法之后。可能吗?怎么样?

1 个答案:

答案 0 :(得分:2)

这是我的解决方案

public class TestCombining {
    public Single<List<Pair<Photo, Profile>>> test(ApiInterface apiInterface) {
        return apiInterface.getPhotos()
                .flattenAsObservable(photos -> photos)
                .flatMap(photo -> apiInterface.getProfile(photo.getId())
                        .map(profile -> new Pair<>(photo, profile)).toObservable())
                .toList();
    }

    interface ApiInterface {
        Single<List<Photo>> getPhotos();

        Single<Profile> getProfile(String photoId);
    }

    interface Profile {
        String getPhotoId();
    }

    interface Photo {
        String getId();
    }
}