使用groupBy和toList rxjava函数与sqlbrite

时间:2015-10-20 06:32:52

标签: android android-sqlite rx-java sqlbrite

当我使用sqlbrite时,在使用groupBy()之后我无法使用rxjava函数toList()。这是我的代码:

groupedObservable.toList().subscribe(items -> {
    Log.d("test", groupedObservable.getKey() + ": " + items);
  });

这样可以正常工作并记录所有项目,但是如果我将其更改为

Google Developers

我没有正确使用toList()吗?这可能是因为sqlbrite流没有结束所以rxjava在完成toList()之前等待更多的项目发出?

1 个答案:

答案 0 :(得分:1)

groupBy是一种特殊的运算符,要求您订阅返回的GroupedObservable,否则它不会请求更多数据并将挂起。在您的第一个示例中,您执行此操作但在第二个示例中,您开始累积组而不订阅它们。

你可以做的是flatMap将群组ping成一对密钥和列表,这样它就不会挂起:

.groupBy(t -> ...)
.flatMap(g -> g.toList().map(lst -> Pair.of(g.getKey(), lst)))
.subscribe(...)

我不熟悉SQLBrite,但是如果应用了toList的非完整源将永远不会发出任何内容(无论是否有groupBy)。< / p>