gpt4 book ai didi

android - 将 Observable> 扁平化为 Observable

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:56 27 4
gpt4 key购买 nike

我有一个 Observable返回单个 Cursor实例(Observable<Cursor>)。我正在尝试利用 ContentObservable.fromCursor获取 onNext 中每个游标的行回调。

我想到的解决方案之一是这样的构造:

ContentObservable.fromCursor(cursorObservable.toBlocking().first())
.subscribe(cursor -> {
// map to object
// add to outer collection
}, e -> {}, () -> {
// do something with list of objects (outer collection)
});

由于 toBlocking().first(),这看起来很像黑客攻击,但它有效。我不喜欢它,因为大部分处理都是在 onNext 中完成的回调,我们必须创建外部集合来保存中间结果。

我想像这样使用它:

cursorObservable.map(ContentObservable::fromCursor)
.map(fromCursor -> fromCursor.toBlocking().first())
.map(/* map to object */)
.toList()
.subscribe(objects -> {
// do something with list of objects
}

这还是利用了toBlocking().first()并且不起作用,因为一旦 fromCursor observable 已完成游标已关闭,因此无法将其映射到对象。有没有更好的方法来展平Observable<Observable<Cursor>>Observable<Cursor>

最佳答案

Is there a better way to flatten Observable<Observable<Cursor>> to Observable<Cursor>?

是的,您可以使用 Observable.concat 方法:

public static void main(String[] args) {
final Observable<String> observable = Observable.just("1", "2");
final Observable<Observable<String>> nested = observable.map(value -> Observable.just(value + "1", value + "2"));
final Observable<String> flattened = Observable.concat(nested);

flattened.subscribe(System.out::println);
}

更新

实际上还有其他一些方法可以转换 Observable<Observable<Cursor>>Observable<Cursor> :

只选择一个更适合你的。

更新 2

另一个解决方案是稍微修改您的代码并使用 flatMap运算符而不是 map :

cursorObservable.flatMap(ContentObservable::fromCursor)
.map(/* map to object */)
.toList()
.subscribe(objects -> {
// do something with list of objects (outer collection)
}

关于android - 将 Observable<Observable<Cursor>> 扁平化为 Observable<Cursor>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30075663/

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