首页 > 解决方案 > reactor-core 3.1 版破坏了现有代码

问题描述

下面的代码来自Learning Spring Boot 2.0Greg Turnquist 的书。它与 reactor-core 版本 3.0.7 一起运行。它不会与 3.1.0 或更高版本一起编译。在 3.0.7 中,该Mono.just().and()方法返回一个 Mono<reactor.util.function.Tuple2<T, T2>>. 在 3.1.0 中,它返回一个Mono<Void>.

这是一个非常糟糕的,在一个小版本中的破坏性变化。我需要做什么才能使此代码在 3.1.0 及更高版本下运行?

Flux.just("alpha", "bravo", "charlie")
        .map(String::toUpperCase)
        .flatMap(s -> Flux.fromArray(s.split("")))
        .groupBy(String::toString)
        .sort((o1, o2) -> o1.key().compareTo(o2.key()))
        .flatMap(group -> Mono.just(group.key()).and(group.count()))
        .map(keyAndCount ->
                keyAndCount.getT1() + " => " + keyAndCount.getT2())
        .subscribe(System.out::println);

标签: project-reactor

解决方案


我会为遇到此问题的其他人发布答案。只需将调用替换为and()调用zipWith()

.flatMap(group -> Mono.just(group.key()).zipWith(group.count()))

很奇怪,reactor 团队会在一个小修改中做出重大改变。


推荐阅读