当我使用sqlbrite时,在使用groupBy()之后我无法使用rxjava函数toList()。这是我的代码:
groupedObservable.toList().subscribe(items -> {
Log.d("test", groupedObservable.getKey() + ": " + items);
});
这样可以正常工作并记录所有项目,但是如果我将其更改为
Google Developers
我没有正确使用toList()吗?这可能是因为sqlbrite流没有结束所以rxjava在完成toList()之前等待更多的项目发出?
答案 0 :(得分:1)
groupBy
是一种特殊的运算符,要求您订阅返回的GroupedObservable
,否则它不会请求更多数据并将挂起。在您的第一个示例中,您执行此操作但在第二个示例中,您开始累积组而不订阅它们。
你可以做的是flatMap
将群组ping成一对密钥和列表,这样它就不会挂起:
.groupBy(t -> ...)
.flatMap(g -> g.toList().map(lst -> Pair.of(g.getKey(), lst)))
.subscribe(...)
我不熟悉SQLBrite,但是如果应用了toList
的非完整源将永远不会发出任何内容(无论是否有groupBy
)。< / p>