使用RXJava2 Flowable过滤数据

Mat*_* H. 3 android rx-java2 android-room

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

假设房间正在返回用户.

Flowable<List<User> getUsers()
Run Code Online (Sandbox Code Playgroud)

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

userDao.getUsers()
.flatMap(listUser -> Flowable.fromIterable(listUser).filter(user -> user.age > 18))
.toList()
.toFlowable()
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.我的猜测是toList()永远不会完成,因为onTerminated永远不会被房间调用.所以我的问题是:我做错了什么?如何过滤我的用户并在最后仍然拥有Flowable?

谢谢

Mat*_* H. 8

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

userDao.getUsers()
.flatMap(listUser -> Flowable.fromIterable(listUser).filter(user -> user.age > 18).toList().toFlowable())
Run Code Online (Sandbox Code Playgroud)