更好地使用 RxJava
Better RxJava usage
我还在学习 RxJava,我想知道是否有其他方法可以做我想做的事情。
我有以下代码,并且有效:
apiManager.getChannelListByRegion(region)
.observeOn(scheduler)
.map(new Func1<ChannelList, List<ChannelList.Channel>>() {
@Override
public List<ChannelList.Channel> call(ChannelList channelList) {
if (params.getGenre() == 0) {
return channelList.getChannels();
} else {
List<ChannelList.Channel> filteredList = new ArrayList<>();
for (ChannelList.Channel channel : channelList.getChannels()) {
if (Integer.parseInt(channel.getGenreId()) == params.getGenre())
filteredList.add(channel);
}
return filteredList;
}
}
})
.subscribe(new SuccessCallback<>(callback), new ErrorCallback(callback));
一些解释 - ChannelList 是一个 POJO,表示来自外部服务的一些 JSon。我无法控制这个 JSon.
的结构
ChannelList 包含一个我想要的嵌入式列表,假设没有过滤列表,我可以很容易地通过 map() 运算符获得它。
但是如果我需要过滤,我会对其内容进行循环并检查过滤条件。
有没有更好的过滤方法?我假设我需要创建另一个 Observable 来发出 List 内容并提供一个函数,但我不确定该怎么做。
我可以向您展示如何仅使用 FP 和 reactivex 重写您的代码。如果它更简单,那就是品味问题了。我将使用 lambda 使代码更易于理解。
apiManager.getChannelListByRegion(region)
.observeOn(scheduler)
.flatMap(channelList->Observable.from(channelList.getChannels()))
.filter(channel->params.getGenre() == 0 || Integer.parseInt(channel.getGenreId()) == params.getGenre())
.toList()
.subscribe(new SuccessCallback<>(callback), new ErrorCallback(callback));
如您所见,我先将 ChannelList 转换为 Channel 的 Observable,以便稍后对其进行过滤并收集为列表。
我还在学习 RxJava,我想知道是否有其他方法可以做我想做的事情。
我有以下代码,并且有效:
apiManager.getChannelListByRegion(region)
.observeOn(scheduler)
.map(new Func1<ChannelList, List<ChannelList.Channel>>() {
@Override
public List<ChannelList.Channel> call(ChannelList channelList) {
if (params.getGenre() == 0) {
return channelList.getChannels();
} else {
List<ChannelList.Channel> filteredList = new ArrayList<>();
for (ChannelList.Channel channel : channelList.getChannels()) {
if (Integer.parseInt(channel.getGenreId()) == params.getGenre())
filteredList.add(channel);
}
return filteredList;
}
}
})
.subscribe(new SuccessCallback<>(callback), new ErrorCallback(callback));
一些解释 - ChannelList 是一个 POJO,表示来自外部服务的一些 JSon。我无法控制这个 JSon.
的结构ChannelList 包含一个我想要的嵌入式列表,假设没有过滤列表,我可以很容易地通过 map() 运算符获得它。
但是如果我需要过滤,我会对其内容进行循环并检查过滤条件。
有没有更好的过滤方法?我假设我需要创建另一个 Observable 来发出 List 内容并提供一个函数,但我不确定该怎么做。
我可以向您展示如何仅使用 FP 和 reactivex 重写您的代码。如果它更简单,那就是品味问题了。我将使用 lambda 使代码更易于理解。
apiManager.getChannelListByRegion(region)
.observeOn(scheduler)
.flatMap(channelList->Observable.from(channelList.getChannels()))
.filter(channel->params.getGenre() == 0 || Integer.parseInt(channel.getGenreId()) == params.getGenre())
.toList()
.subscribe(new SuccessCallback<>(callback), new ErrorCallback(callback));
如您所见,我先将 ChannelList 转换为 Channel 的 Observable,以便稍后对其进行过滤并收集为列表。