For instance, Mono had a and operator and when static methods which used to combine elements and to produce Mono<Tuple2> . In essence, they were essentially a specialization of zipWith and zip in Flux , but having different names made it difficult to attach the concepts. That is why these methods have been renamed in Mono .

On the other hand, you’ll notice that a different flavor of when and and is still present in the Mono API. Contrary to the ones we saw previously, these return a Mono<Void> . Dealing with completion of tasks is an essential use case of Mono , and these methods are now specifically tailored for that sort of application: they will combine and execute several tasks (represented as source Monos), ignore their potential onNext signal and only propagate the combination of onComplete signals, resulting in a Mono<Void> that completes whenever the N tasks complete.