Reactor之發射器(Flux、Mono)轉換操作函數

Reactor 發射器轉換操作函數

  • concatWithValues

 

@SafeVarargs
public final Flux<T> concatWithValues(T... values)

將值連接到Flux的末尾。

image

  • concat

 

public static <T> Flux<T> concat(Iterable<? extends Publisher<? extends T>> sources)

連接兩個Flux, 連接由源下游發射的迭代轉發元素提供的所有源。
通過順序訂閱第一個源,然後在訂閱下一個源之前等待它完成,等等,直到最後一個源完成,從而實現連接。任何錯誤立即中斷序列並被轉發到下游。

image

  • concatDelayError

 

public static <T> Flux<T> concatDelayError(Publisher<? extends Publisher<? extends T>> sources)

將從父Publisher發出的ONNEXT信號連接到所有源,轉發由下游源發出的元素。
通過順序訂閱第一個源,然後在訂閱下一個源之前等待它完成,等等,直到最後一個源完成,從而實現連接。錯誤不會中斷主序列,但是在其餘的源有機會被連接之後被傳播。

image

此操作符在取消時丟棄內部排隊的元素以產生背壓。

  • first

 

@SafeVarargs
public static <I> Flux<I> first(Publisher<? extends I>... sources)

選擇第一個Publisher發出任何信號(onNext/onError/onComplete)並重放來自該Publisher的所有信號,有效地表現得像這些競爭源中最快的一個。

image

返回一個新的Flux,其性能最快。

  • merge

 

public static <T> Flux<T> merge(Publisher<? extends Publisher<? extends T>> source)

將由Publisher發出的Publisher序列的數據合併爲交織合併序列。與concat不同的是,內部source踊躍競爭。

image

返回一個合併的Flux

  • mergeOrdered

 

@SafeVarargs
public static <I extends Comparable<? super I>> Flux<I> mergeOrdered(Publisher<? extends I>... sources)

通過從每個源(由它們的自然順序定義)中選擇最小值,將來自提供的Publisher序列的數據合併成有序的合併序列。這不是一個SORT(),因爲它不考慮整個序列。
相反,該操作符只考慮來自每個源的一個值,並選擇所有這些值中最小的值,然後爲選擇的源補充槽。

image

返回 一個合併Flux,但保持原始排序的合併Flux

  • switchOnNext

 

public static <T> Flux<T> switchOnNext(Publisher<? extends Publisher<? extends T>> mergedPublishers)

創建一個Flux,該鏡像反映最近發佈的Publisher,轉發其數據直到源代碼中的新Publisher進入。
一旦源中沒有新的Publisher(源已完成),並且最後一個鏡像Publisher也已完成,則生成的Flux將完成。

image

  • zip

 

public static <T1,T2,O> Flux<O> zip(Publisher<? extends T1> source1,
                                    Publisher<? extends T2> source2,
                                    BiFunction<? super T1,? super T2,? extends O> combinator)

將兩個源壓縮在一起,也就是說,等待所有源發出一個元素,並將這些元素組合成一個輸出值(由提供的組合器構造)。操作將繼續這樣做,直到任何來源完成。錯誤將立即被轉發。這種“Step-Merge”處理在分散聚集場景中特別有用。

image

  • all

 

public final Mono<Boolean> all(Predicate<? super T> predicate)

如果這個序列的所有值與謂詞匹配,則發出一個布爾布爾值true 。
該實現使用短路邏輯,如果謂詞與值不匹配,則用FALSE完成。

image

  • any

 

public final Mono<Boolean> any(Predicate<? super T> predicate)

如果這個Flux序列的任何值與謂詞匹配,則發出一個布爾布爾值true。
該實現使用短路邏輯,如果任何值與謂詞不匹配,則完成FALSE。

image

  • as

 

public final <P> P as(Function<? super Flux<T>,P> transformer)

將此Flux轉換爲目標類型。

  • buffer

 

public final Flux<List<T>> buffer()

將所有傳入的值收集到一個列表緩衝器中,一旦該Flux完成,將由返回的Flux發出。

image

該操作在數據信號觸發的取消或錯誤時丟棄緩衝器。

  • cache

 

public final Flux<T> cache()

將此Flux量轉換爲熱源,併爲進一步的用戶緩存最後發射的信號。將保留一個無限量的OnNeXT信號。完成和錯誤也將被重放。

image

返回一個緩存的 Flux

  • cast

 

public final <E> Flux<E> cast(Class<E> clazz)

將產生的Flux類型轉換爲目標產生類型。

image

  • collect

 

public final <E> Mono<E> collect(Supplier<E> containerSupplier,
                                 BiConsumer<E,? super T> collector)

通過應用收集器BiConsumer獲取容器和每個元素,將此Flux發出的所有元素收集到用戶定義的容器中。收集的結果將在這個序列完成時發出。

image

  • collectList

 

public final Mono<List<T>> collectList()

將此Flux所發射的所有元素收集到序列完成時由結果Mono發出的列表。

image

  • defaultIfEmpty

 

public final Flux<T> defaultIfEmpty(T defaultV)

如果沒有任何數據完成此序列,則提供默認的唯一值

image

  • distinct

 

public final Flux<T> distinct()

對於每一個Subscriber,跟蹤已經從這個Flux 跟蹤元素和過濾出重複。
值本身被記錄到一個用於檢測的哈希集中。如果希望使用distinct(Object::hashcode)更輕量級的方法,該方法不保留所有對象,但是更容易由於hashcode衝突而錯誤地認爲兩個元素是不同的。

image

  • doOnCancel

 

public final Flux<T> doOnCancel(Runnable onCancel)

當Flux被取消時觸發附加行爲(side-effect)。

image

  • doOnComplete

 

public final Flux<T> doOnComplete(Runnable onComplete)

當Flux完成時觸發附加行爲(side-effect)。

image

  • doOnNext

 

public final Flux<T> doOnNext(Consumer<? super T> onNext)

當Flux發射一個項目時附加行爲(side-effect)。

image

  • filter

 

public final Flux<T> filter(Predicate<? super T> p)

根據給定謂詞評估每個源值。如果謂詞測試成功,則發出該值。如果謂詞測試失敗,則忽略該值,並在上游生成請求1。

image

  • log

 

public final Flux<T> log()

觀察所有 Reactive Streams信號並使用記錄器支持跟蹤它們。默認值將使用Level.INFO和 java.util.logging日誌記錄。如果SLF4J是可用的,它將被用來代替。

image

  • map

 

public final <V> Flux<V> map(Function<? super T,? extends V> mapper)

通過對每個項目應用同步功能來轉換由該Flux發出的項目。

image

  • then

 

public final <V> Mono<V> then(Mono<V> other)

讓這個Flux完成,然後播放信號提供的Mono。
換句話說,忽略這個Flux和轉換完成信號的發射和提供Mono完成信號。在得到的Mono中重放錯誤信號。

image

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章