RxJava 1.x .zip()不适用于RxJava 2.0

我正在尝试使用RxJava + Retrofit + Kotlin来学习链接请求。 我正在使用的教程是使用RxJava 1.x,所以当我尝试用RxJava 2.x重新实现时,我无法使用.zip()来工作。

这是一个简单的应用程序使用星球大战API,返回电影列表,并为每个电影和,从他们的角色。

fun loadMoviesFull(): Observable<Movie> { return service.listMovies() .flatMap { filmResults -> Observable.from(filmResults.results) } .flatMap { film -> Observable.zip( Observable.just(Movie(film.title, film.episodeId, ArrayList<Character>())), Observable.from(film.personUrls) .flatMap { personUrl -> service.loadPerson(Uri.parse(personUrl).lastPathSegment) } .map { person -> Character(person!!.name, person.gender) } .toList(), { movie, characters -> movie.characters.addAll(characters) movie }) } } 

如果你想看看教程的整个实施,这是链接(评论是葡萄牙语): http : //www.nglauber.com.br/2017/03/rxjava-kotlin-retrofit-star-wars- api.html

我只想知道ir的语法,因为我不能在2.x上实现。

非常感谢你,我很抱歉我的英语不好。

我不知道编译器产生了什么错误,但很可能你的函数应该返回Observable<List<Movie>>zipBiFunction需要明确地传递类型,最后不应该有单个的movie 。 当然.toList()在最后。

完整代码:

 fun loadMoviesFull(): Observable<List<Movie>> { return service.listMovies() .flatMap { filmResults -> Observable.from(filmResults.results) } .flatMap { film -> Observable.zip( Observable.just(Movie(film.title, film.episodeId, ArrayList<Character>())), Observable.from(film.personUrls) .flatMap { personUrl -> service.loadPerson(Uri.parse(personUrl).lastPathSegment) } .map { person -> Character(person!!.name, person.gender) } .toList(), BiFunction<Movie, Character, Movie>{ movie, characters -> movie.characters.addAll(characters) }) }.toList() } 

由于名气不足,我不会让我添加评论,因此发布作为答案。 你在用rxkotlin吗? 有许多帮助函数,包括Observable.zip() ,它们在使用Rx2时帮助解决SAM模糊问题。 不知道你的错误是什么,这是我能给的最好的建议。