如何将自定义pojo作为参数传递给rxjava2 Observable中的接口方法调用?

当前的代码

Observable.from(listMovie)//list of movie .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { @Override public Observable<FavMovieRes> call(Movie movie) { return moviesAPI.makeMovieFav(userId), sessionId, new MakeMovieFav("movie", movie.getId(), movie.isFavList())); } }) .subscribe(new Subscriber<FavMovieRes>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(FavMovieRes favMovieRes) { } }); 

在上面的代码中,我将Movie对象列表传递给Observable,并在结果从API获取结果时对列表中的每个电影实例执行一个操作我想要更改一些有关该电影实例的数据库如何获取OnNext()中的每个Movie实例以及on订阅方法的错误方法。 我想要的是

 Observable.from(listMovie) .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { @Override public Observable<FavMovieRes> call(Movie movie) { return moviesAPI.makeMovieFav(String.valueOf(SharedPreferenceDataManager.getUserId(SyncFavListPeriodicTask.this)), SharedPreferenceDataManager.getSessionId(SyncFavListPeriodicTask.this), new MakeMovieFav("movie", movie.getId(), movie.isFavList())); } }).subscribe(new Subscriber<FavMovieRes>() { @Override public void onCompleted() { } @Override public void onError(Throwable e,Movie movie) {//or MakeMovieFav makeMovieFav } @Override public void onNext(FavMovieRes favMovieRes,Movie movie) {//or MakeMovieFav makeMovieFav } }); 

我想你有一个列表,并希望处理每个接收到的项目进行另一个单独的异步操作。 对于这种情况,您可以将每个结果平面图。

flatMapIterable意味着它会将列表中的每个项目都分解为Observable到流中的下一个操作。 flatMap意味着它会对收到的值进行操作。

如果你想把结果放在一起,你可以在flatMap之后使用toList

你需要为你的flatmap创建一个Observable(Operation)。

科特林:

 Observable.just(data) .flatMapIterable { it } .flatMap{ moviesAPI.makeMovieFavObservable(whatEver) } .subscribe( ... , ... , ... ) 

Java(未测试)

 Observable.just(data) //parse each item in the list and return it as observable .flatMapIterable(d -> d) // use each item and to another observable operation .flatMap(data -> Observable.just(moviesAPI.movieStuff(data))) // use each result and put it back into a list .toList() // put the result back to a list // subscribe it and log the result with Tag data, throw the error and output when completed .subscribe( data -> Log.d("Data", "Data received "+ data), error -> error.printStackTrace(), () -> Log.d("Completed", "Completed") );