У меня есть блок кода, который преобразует блок списка [VideoDetails] в VideoGrid используя заявления пары карт с ReactiveX:Transform Collection наблюдаемого в реакционно X Java
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
}
})
Как вы можете видеть, I» m, используя преобразование Guava в одном из операторов отображения, чтобы перейти из списка [VideoDetails] в список [Видео]. Я бы предположил, что через ReactiveX есть лучший способ выполнить это преобразование? Я просматривал документы , но я мог бы быть слишком зеленым с ReactiveX, чтобы знать, что использовать здесь.
Вышеприведенный фрагмент кода работает, я бы скорее сделал это правильно, если это возможно.
Имеет смысл. Рад узнать, что я не пропустил ничего очевидного. В крупном масштабе вы думаете, что было бы более результативно делать это в (хотя и более тупым) способом, которым вы и krp описываете? – Zack
Я добавил код, который покажет вам, как вы можете оставаться в Rx все время, но он будет генерировать больше мусора, чем использование Guava. Весь объект Observable.from(). Map(). ToList() создает много временных объектов. В любом случае, если вы идете с помощью метода all-Rx или остаетесь с List.transform(), вы должны кэшировать свою функцию селектора/трансформатора как статическое поле, чтобы убедиться, что анонимный внутренний класс не создается в каждой точке привязки. –
Что касается производительности во время выполнения, вам нужно будет профилировать код в контексте вашей системы, чтобы получить осмысленный ответ на этот вопрос. –