发出每个有缺陷的项目并附加到列表



我们可以将Flowable设置为在准备就绪时发出每个项目,但将其附加到列表中(类似于buffer(int size)但没有明确的功能) 我对返回Flowable <List <ItemEntity>>的数据库进行搜索查询,然后将每个ItemEntity映射到一个ItemDomain,它返回一个Flowable <List <ItemDomain>>Flowable <List <ItemDomain>>是否可以按顺序返回值,而无需等待整个结果(即首先是一个项目列表,然后是一个两个项目列表,然后是一个三个项目列表等)。 当我更改搜索查询时,我希望再次收到新列表。

override fun observeGroupsBySearchQuery(query: String): Flowable<List<Group>> {
return groupsDao.observeGroupsBySearchQuery(query)
.switchMap {
Flowable.fromIterable(it)
.map { group ->
Group(group.symbol, group.number, group.name)
}
.toList() // I dont want to wait until finish, but I dont want to loose earlier emitted items
.toFlowable()
}
}
@Query(
value = """
SELECT * 
FROM Groups 
WHERE symbol || number || name LIKE '%' || :query || '%' AND number != -1 AND active IS 1
""")
abstract fun observeGroupsBySearchQuery(query: String): Flowable<List<GroupsEntity>> 

另一个有趣的问题是数据库(房间)是否可以一个接一个地返回结果(我们必须为此使用pagination)?

听起来你需要scan来接收中间聚合:

groupsDao.observeGroupsBySearchQuery(query)
.switchMap(it ->
Flowable.fromIterable(it)
.map(group -> Group(group.symbol, group.number, group.name))
.scan(new ArrayList<>(), (state, t) -> { state.add(t); return state; })
.skip(1)
)

如果您计划在不同的线程上使用中间列表,则必须每次都制作一份副本:

.skip(1)
.map(list -> new ArrayList<>(list))

最新更新