首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将groupBy和toList rxjava函数与sqlbrite一起使用

将groupBy和toList rxjava函数与sqlbrite一起使用
EN

Stack Overflow用户
提问于 2015-10-20 14:32:52
回答 1查看 606关注 0票数 3

当我使用sqlbrite时,在使用groupBy()之后不能使用rxjava函数toList()。下面是我的代码:

代码语言:javascript
复制
QueryObservable query = jetAnywhereDB.createQuery(Item.TABLE, "SELECT * FROM testTable");
query.flatMap(q -> {
  return q.asRows(Item.MAPPER);
}).
groupBy(item -> {
  return Character.toUpperCase(item.name.charAt(0));
}).
subscribe(groupedObservable -> {
  groupedObservable.subscribe(item -> {
    Log.d("test", groupedObservable.getKey() + ": " + item.name);
  });
});

这可以很好地工作,并在发出时记录所有项,但如果我将其更改为

代码语言:javascript
复制
groupedObservable.toList().subscribe(items -> {
    Log.d("test", groupedObservable.getKey() + ": " + items);
  });

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

EN

回答 1

Stack Overflow用户

发布于 2015-10-20 18:29:16

groupBy是一种特殊类型的运算符,它要求您订阅返回的GroupedObservable,否则它不会请求更多数据而会挂起。在第一个示例中,您做到了这一点,但在第二个示例中,您在没有订阅组的情况下开始累积组。

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

代码语言:javascript
复制
.groupBy(t -> ...)
.flatMap(g -> g.toList().map(lst -> Pair.of(g.getKey(), lst)))
.subscribe(...)

我对SQLBrite并不熟悉,但确实,一个应用了toList的非完整源代码永远不会发出任何东西(无论是否有groupBy )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33229556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档