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