我有一個Observable
,它返回一個Cursor
實例(Observable<Cursor>
)。我試圖利用ContentObservable.fromCursor
獲取onNext
回調中的每個遊標行。Flatten Observable <Observable <Cursor>> to Observable <Cursor>
一個我已經想通了的解決方案是這樣的結構:
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<Cursor>>
弄平到Observable<Cursor>
?