在Reactor中,Mono和Flux确实有类似于Stream和Optional的Peek和IfPresent操作符,它们分别是doOnNext和doOnSuccess。
doOnNext操作符在Mono或Flux的每个元素发出之前调用一个函数。它可以用于执行副作用操作或记录日志,而不会改变流中的元素。
doOnSuccess操作符只在Mono成功完成时调用一个函数。它类似于doOnNext,但只适用于Mono,并且只在成功时调用。
下面是一个使用doOnNext和doOnSuccess的示例代码:
Mono<String> mono = Mono.just("Hello")
.doOnNext(value -> System.out.println("doOnNext: " + value))
.doOnSuccess(value -> System.out.println("doOnSuccess: " + value));
Flux<Integer> flux = Flux.range(1, 5)
.doOnNext(value -> System.out.println("doOnNext: " + value))
.doOnSuccess(value -> System.out.println("doOnSuccess: " + value));
mono.subscribe();
flux.subscribe();
输出:
doOnNext: Hello
doOnSuccess: Hello
doOnNext: 1
doOnNext: 2
doOnNext: 3
doOnNext: 4
doOnNext: 5
在这个示例中,我们分别对一个Mono和一个Flux进行了doOnNext和doOnSuccess操作。在订阅流时,我们可以看到相应的输出。