我有一段代码,它使用 ReactiveX 的几个映射语句将 List[VideoDetails] block 转换为 VideoGrid :
feedService.loadVideoDetailsFeed(things)
.map(new Func1<List<VideoDetails>, List<Video>>() {
@Override
public List<Video> call(List<VideoDetails> details) {
return Lists.transform(details, new Function<VideoDetails, Video>() {
@Override
public Video apply(VideoDetails input) {
return input.getVideo();
}
});
}
})
.map(new Func1<List<Video>, VideoGrid>() {
@Override
public VideoGrid call(List<Video> videos) {
//stuff
}
})
如您所见,我在其中一个映射语句中使用 Guava 转换从列表 [VideoDetails] 到列表 [Video]。我认为通过 ReactiveX 有更好的方法来完成这种转变吗?我正在浏览transforming section文档,但我可能对 ReactiveX 太陌生,不知道在这里使用什么。
上面的代码片段有效,如果可能的话,我宁愿以正确的方式执行它。
最佳答案
保持 rx 风格,您可以使用下面的示例:
编辑
feedService.loadVideoDetailsFeed(things)
.flatMap(new Func1<List<VideoDetails>, Observable<Video>>() {
@Override
public Observable<Video> call(List<VideoDetails> videoDetailsList) {
return Observable.from(videoDetailsList).map(new Func1<VideoDetails, Video>() {
@Override
public Video call(VideoDetails videoDetails) {
return videoDetails.getVideo();
}
});
}
})
.toList();
关于java - 在 Reactive X Java 中转换可观察的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417827/