哪個(gè)網(wǎng)站買做房圖紙好鏈接推廣平臺(tái)
Reactor核心組件
- Flux和Mono組件
- (1)Flux組件
- (2)Mono組件
Flux和Mono組件
Reactor 框架提供了兩個(gè)核心組件來發(fā)布數(shù)據(jù),分別是 Flux 和 Mono 組件。兩者都是實(shí)現(xiàn)Publisher接口的高級(jí)抽象,可以說是應(yīng)用程序開發(fā)過程中最基本的編程對(duì)象。二者都可以被onComplete
信號(hào)或者onError
信號(hào)所終止。
(1)Flux組件
表示0到N個(gè)元素的異步序列,可以是有限的或無限的。
示例:
創(chuàng)建Flux
import reactor.core.publisher.Flux;public class FluxExample {public static void main(String[] args) {// 從靜態(tài)數(shù)據(jù)創(chuàng)建Flux<String> flux1 = Flux.just("Hello", "World");// 從集合創(chuàng)建Flux<Integer> flux2 = Flux.fromIterable(Arrays.asList(1, 2, 3, 4, 5));// 生成動(dòng)態(tài)數(shù)據(jù)Flux<Integer> flux3 = Flux.range(1, 10);// 創(chuàng)建無限流Flux<Long> flux4 = Flux.interval(Duration.ofSeconds(1));// 訂閱Fluxflux1.subscribe(System.out::println);flux2.subscribe(System.out::println);flux3.subscribe(System.out::println);flux4.subscribe(System.out::println);}
}
操作Flux
import reactor.core.publisher.Flux;public class FluxOperationsExample {public static void main(String[] args) {Flux<Integer> flux = Flux.range(1, 10).filter(i -> i % 2 == 0) // 過濾偶數(shù).map(i -> i * i) // 映射到平方.doOnNext(System.out::println); // 打印每個(gè)元素flux.subscribe();}
}
(2)Mono組件
表示0到1個(gè)元素的異步序列,通常用于處理單個(gè)結(jié)果或空結(jié)果的情況。
示例:
創(chuàng)建Mono
import reactor.core.publisher.Mono;public class MonoExample {public static void main(String[] args) {// 從靜態(tài)數(shù)據(jù)創(chuàng)建Mono<String> mono1 = Mono.just("Hello, Mono");// 創(chuàng)建空的MonoMono<String> mono2 = Mono.empty();// 創(chuàng)建包含錯(cuò)誤的MonoMono<String> mono3 = Mono.error(new RuntimeException("An error occurred"));// 訂閱Monomono1.subscribe(System.out::println);mono2.subscribe(System.out::println);mono3.subscribe(System.out::println, System.err::println);}
}
操作Mono
import reactor.core.publisher.Mono;public class MonoOperationsExample {public static void main(String[] args) {Mono<Integer> mono = Mono.just(10).map(i -> i * 2) // 映射到雙倍.doOnNext(System.out::println) // 打印元素.flatMap(i -> Mono.just(i / 2)); // 扁平映射mono.subscribe();}
}
某種程度上可以把 Mono 看作是 Flux 的一種特例,而兩者之間也可以進(jìn)行相互的轉(zhuǎn)換和融合。如果你有兩個(gè) Mono 對(duì)象,那么把它們合并起來就能獲取一個(gè) Flux 對(duì)象。除此之外,把一個(gè) Flux 轉(zhuǎn)換成 Mono 對(duì)象也有很多辦法,例如對(duì)一個(gè) Flux 對(duì)象中所包含的元素進(jìn)行計(jì)數(shù)操作就能得到一個(gè) Mono 對(duì)象。
Flux和Mono對(duì)象的轉(zhuǎn)換:
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;public class ConversionExample {public static void main(String[] args) {// Mono轉(zhuǎn)FluxMono<String> mono = Mono.just("Hello, World");Flux<String> fluxFromMono = mono.flux();fluxFromMono.subscribe(System.out::println);// Flux轉(zhuǎn)MonoFlux<Integer> flux = Flux.just(1, 2, 3, 4, 5);Mono<Integer> monoFromFlux = flux.next();monoFromFlux.subscribe(System.out::println);}
}