3 回答

TA貢獻1852條經驗 獲得超1個贊
RxJava僅使用最多支持9個不同的源zip
。除此之外,您還必須使用zip(Iterable<ObservableSource>, Func<Object[],R>)
方法并將Object[]
back的每個元素轉換為其各自的類型。
返回一個
Observable
,該數組發出指定combiner
函數的結果,該函數應用于Iterable
其他ObservableSource
s依次發出的項的組合。zip按嚴格順序應用此功能,因此new發出的第一項ObservableSource
將是應用到每個源ObservableSource
s發出的第一項的函數的結果;new發出的第二個項目ObservableSource
將是每個ObservableSource
s發出的應用于第二個項目的函數的結果;等等。
ObservableSource<R>
從zip返回的結果將調用發出最少項目的源onNext
的onNext
調用次數ObservableSource
。如果其中一個來源的資源比其他來源的資源短,而其他來源則更容易完成,那么操作員將按照其指定的順序訂閱其來源,并熱切地完成操作。因此,其他來源可能永遠無法運行完成(因此無法調用
doOnComplete()
)。如果光源長度完全相同,也會發生這種情況。如果源A完成并且B已被消耗并即將完成,則操作員將檢測到A將不再發送其他值,它將立即處置B。例如:zip(Arrays.asList(range(1, 5).doOnComplete(action1), range(6, 5).doOnComplete(action2)), (a) -> a)
action1
將被調用,但action2
不會。要變通解決此終止屬性,請使用doOnDispose(Action)
或using()
在完成或dispose()
調用的情況下使用或進行清理。關于方法簽名的注意事項:由于Java不允許使用new創建通用數組T[]
,因此該操作符的實現必須創建一個Object[]
replace。不幸的是,Function<Integer[], R>
傳遞給方法會觸發ClassCastException
。
添加回答
舉報