使用RXJava2 Flowable 进行数据过滤

3
我正在使用Room和RxJava,希望利用RxJava的威力来过滤从Room返回的数据。假设Room返回用户信息。
Flowable<List<User> getUsers()

然后我想按年龄>18过滤用户,因此我执行了以下操作:

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

很遗憾,这不起作用。 我猜是因为toList()永远不会完成,因为room从未调用onTerminated。 所以我的问题是:我做错了什么?我如何过滤我的用户并最终仍然拥有Flowable?谢谢。

1
filter之后的flatMap lambda中应用toList。据我所知,Room从不完成流,并且toList要求有限源。您过滤的内部流构成了有限源。 - akarnokd
是的,它就这么简单。Room 从未发送任何 onComplete,但使用 fromIterable 构建的 Flowable 将会发送。谢谢。 - Mathieu H.
1个回答

8

Room不会调用onComplete(因此toList永远不会完成),但使用fromIterable构建的内部流是有限的,并将触发onComplete。因此,应在flatMap中调用flow的toList和toFlowable。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接