gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:05:00 26 4
gpt4 key购买 nike

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

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);
});
});

这工作正常并在所有项目发出时记录它们,但如果我将其更改为

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

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

最佳答案

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

您可以做的是 flatMap将组连接到一对键和列表中,这样它就不会挂起:

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

我不熟悉 SQLBrite 但它确实是一个应用了 toList 的非完成源将永远不会发出任何东西(无论是否有 groupBy 或不是)。

关于android - 将 groupBy 和 toList rxjava 函数与 sqlbrite 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33229556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com