【问题标题】:Filtering data using RXJava2 Flowable使用 RXJava2 Flowable 过滤数据
【发布时间】:2017-11-10 15:49:51
【问题描述】:

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

假设房间正在返回用户。

Flowable<List<User> getUsers()

然后我想过滤年龄大于 18 岁的用户,所以我执行了以下操作:

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

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

谢谢

【问题讨论】:

  • flatMap lambda 中应用 toList,就在 filter 之后。 Afaik Room 永远不会完成流程,toList 要求有限源。您过滤的内部流构成有限。
  • 是的,就是这么简单。 Room 永远不会发送任何 onComplete 但使用 fromIterable 的 Flowable 构建会。谢谢

标签: android rx-java2 android-room


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多