簡體   English   中英

RxJava:如何在不中斷鏈的情況下有條件地將運算符應用於 Observable

[英]RxJava: How to conditionally apply Operators to an Observable without breaking the chain

我在 RxJava observable 上有一系列操作符。 我希望能夠根據布爾值應用兩個運算符之一而不會“破壞鏈”。

我對 Rx(Java) 比較陌生,我覺得可能有一種比我目前引入臨時變量的方法更慣用和可讀的方法。

這是一個具體的例子,如果批量大小字段為非空,則從 observable 中緩沖項目,否則使用toList()發出單個無界大小的批次:

Observable<Item> source = Observable.from(newItems);
Observable<List<Item>> batchedSource = batchSize == null ?
                source.toList() :
                source.buffer(batchSize);
return batchedSource.flatMap(...).map(...)

這樣的事情可能嗎? (偽 lambdas 因為 Java):

Observable.from(newItems)
    .applyIf(batchSize == null,
             { o.toList() },
             { o.buffer(batchSize) })
    .flatMap(...).map(...)

您可以使用compose(Func1)保持順序但執行自定義行為

source
.compose(o -> condition ? o.map(v -> v + 1) : o.map(v -> v * v))
.filter(...)
.subscribe(...)

如果您希望發出單個值或switchIfEmpty如果您希望使用另一個 Observable 發出多個值,您還可以將filter運算符與defaultIfEmpty使用。

val item = Observable.just("ABC")

item.filter { s -> s.startsWith("Z") }
    .defaultIfEmpty("None")
    .subscribe { println(it) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM