android - Rxjava过滤List中的重复项

标签 android database retrofit2 rx-java2

我在我的应用程序中使用 RxJava 和 Retrofit。这是应用程序的设置。当应用程序启动时,应用程序向数据库发出两个请求,另一个向网络 Api 发出请求(使用 Retrofit),两个请求都返回 Observable<List<Article>> .所以我所做的基本上是合并两个 Observable。现在的问题有时是网络返回的文章已经存在于数据库中。那么如何从列表中过滤掉重复项。这是我的代码。

return Observable.merge(dataSource.getArticles(source), remoteSource.getArticles(source))
            .distinct();

所以我尝试了不同的运算符,但它没有过滤掉文章。这里的输出看起来像 db 的形式。

Article1
Article2
Article3
Article4

网络输出

Article7
Articke8
Article3
Article4

我想要的是一个不同的文章列表

最佳答案

假设您的 Article 具有正确的 equals 实现,

您可以将它们收集成一组:

 dataSource.getArticles(source)
    .mergeWith(remoteSource.getArticles(source))
    .collect(HashSet::new, (set, list) -> set.addAll(list))

或者您可以展开每个列表并应用 distinct 后跟 toList:

 dataSource.getArticles(source)
    .mergeWith(remoteSource.getArticles(source))
    .flatMapIterable(v -> v)
    .distinct()
    .toList()

关于android - Rxjava过滤List中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45368588/

相关文章:

android - 使用改进的 HttpException 捕获错误消息

android - 我如何在 Eclipse 中查看我的 Android 应用首选项

android - Activity 和共享 View 之间的动画 : glitchy/hack at the ends of animation?

android - 在 Android 中上下滑动更改布局

java - 如何从响应中检索数据? - 改造2

android - 如何使用 Retrofit 解决 IllegalArgumentException "Malformed content type: ......"

java - AndroidPlot:检测点上的触摸事件

database - 每天将 Postgresql 数据库从小型 SSD 自动备份到多个硬盘

php - 从今天开始从数据库中选择

mysql - 如何将300GB+的数据存储到mysql中