Reactor Flux 操作符
Flux常见操作符。
1 buffer
//每次缓存一定数量的元素到List buckets里,并push出去
Flux.range(1, 30).buffer(20).subscribe(System.out::println);
System.out.println("---------- 分割线1 ----------");
//每次缓存一定数量,并跳过一定数量的元素到List buckets里,并push出去
Flux.range(1, 30).buffer(10,10).subscribe(System.out::println);
System.out.println("---------- 分割线2 ----------");
//每次缓存一定数量,并跳过一定数量的元素到指定的Set buckets里,并push出去
Flux.range(1, 30).buffer(20,20, HashSet::new).subscribe(System.out::println);
System.out.println("---------- 分割线3 ----------");
//指定时间内,每次缓存一定数量的元素到List buckets里,并push出去
Flux.intervalMillis(100).bufferMillis(500).take(3).toStream().forEach(System.out::println);
System.out.println("---------- 分割线4 ----------");
//缓存元素到List buckets里当符合条件时,把元素push出去
Flux.range(1, 10).bufferUntil(i -> i % 2 == 0).subscribe(System.out::println);
System.out.println("---------- 分割线5 ----------");
//把符合条件的缓存元素到List buckets里并把元素push出去
Flux.range(1, 10).bufferWhile(i -> i % 2 == 0).subscribe(System.out::println);
执行结果:
---------- buffer ----------
11:02:21.193 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
---------- 分割线1 ----------
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
---------- 分割线2 ----------
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
---------- 分割线3 ----------
[0, 1, 2, 3]
[4, 5, 6, 7, 8]
[9, 10, 11, 12, 13]
---------- 分割线4 ----------
[1, 2]
[3, 4]
[5, 6]
[7, 8]
[9, 10]
---------- 分割线5 ----------
[2]
[4]
[6]
[8]
[10]
2 filter
Flux.range(1, 10).filter(i -> i % 2 == 0)