android - 使用 RXJava2 Flowable 过滤数据

标签 android rx-java2 android-room

我正在使用 Room 和 RxJava,我想使用第二个的强大功能来过滤来自第一个的数据。

假设房间正在返回用户。

Flowable<List<User> getUsers()

例如,我想按年龄 > 18 过滤用户,所以我执行了以下操作:

userDao.getUsers()
.flatMap(listUser -> Flowable.fromIterable(listUser).filter(user -> user.age > 18))
.toList()
.toFlowable()

不幸的是,这不起作用。 我的猜测是 toList() 永远不会结束,因为 onTerminated 永远不会被房间调用。 所以我的问题是:我做错了什么?我怎样才能过滤我的用户并在最后仍然有一个 Flowable?

谢谢

最佳答案

Room 永远不会调用 onComplete(然后 toList 永远不会完成)但是使用 fromIterable 构建的内部流程是有限的并且会触发 onComplete。所以应该在 flatMap 内的流上调用 toList 和 toFlowable

userDao.getUsers()
.flatMap(listUser -> Flowable.fromIterable(listUser).filter(user -> user.age > 18).toList().toFlowable())

关于android - 使用 RXJava2 Flowable 过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47226561/

相关文章:

android - 如何在android中设置个人资料照片选项?

android - asmack-android-8-4.0.6 : SASLError using DIGEST-MD5: not-authorized

android - 双击 onBack 的 Rxjava 以完成 Activity

java - 使用 RxJava 运行代码时出现编译错误

android - 数据未正常更新(房间数据库)

java - 来自 OAuth 的回调不调用 onResume()

android - 如何在 Android RxJava 中使用 flatMap 在不使用 lambda 函数的情况下顺序调用三个 Web 服务?

java - 如何使用 viewModel 中的观察者方法解决 "anonymous class derived from observer"错误

android - 如何简单地用 RX/Coroutines 替换 android AsyncTask 并返回一个值?

java - 计算 Panchanga 元素结束时间