【发布时间】:2015-11-20 02:16:41
【问题描述】:
我有从 REST 端点返回的列表。我需要将该列表分解为类别(类别是列表每个条目中的一个项目)。个别类别将被写入缓存,以便以后更快地查找。
我不知道我是否可以 .map() 条目并提供多个 filter() 或某种类型的 case 语句来将类别条目放入正确的存储桶中。
用 rxJava 实现这样的事情听起来合理吗?
更新: 非工作版本
private Map<String, List<VideoMetadataInfoEntity>> buildCategories( Observable<List<VideoMetadataInfoEntity>> videoList ) {
Map<String, List<VideoMetadataInfoEntity>> categoryMap = new HashMap<>();
videoList
.flatMap( Observable::from )
.subscribe( videoMetadataInfoEntity -> mapCategory(videoMetadataInfoEntity, categoryMap ) );
Observable.just( categoryMap )
.doOnNext( saveCategoriesToCacheAction );
return categoryMap;
}
然而,这些按顺序触发,这是我的理解,第二个 observable 没有发送任何 saveCategoriesToCacheAction 内容,因为它没有订阅第一个 observable 的结果。
我开始认为我应该修改我的缓存策略。该列表将始终包含所有详细信息。该服务没有为我提供可用于列出的子集,然后再次调用以获取完整详细信息。它是一个项目的完整列表或完整详细信息。现在将每个单独缓存到他们自己的类别缓存中可能是一种更好的方法。我试图做映射,以便此网络调用可以返回请求的类别,但后续调用将来自缓存,直到缓存过期并且新的网络调用刷新它。
【问题讨论】:
-
rx 适用于您希望并行执行任务的地方。这里的并行性在哪里?