我在我的应用程序中使用 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/