Java Flux GroupedFlux count() 打印

Java Flux GroupedFlux count() print

大家好,全世界的校长们。我在 Java 中进行响应式编程。我是一名 java/grails/react 开发人员,但第一步是使用 Spring Boot 进行反应式编程,在本例中为版本 2 M7。在下一个代码中:

@GetMapping(API_BASE_PATH + "/flux4")
public String flux4() {
    StringBuilder sb = new StringBuilder();
    Flux.just("alpha", "bravo", "charlie")
        .map(String::toUpperCase)
        .flatMap(s -> Flux.fromArray(s.split("")))
        .groupBy(String::toString)
        .sort(Comparator.comparing(GroupedFlux::key))
        .map(group -> group.key() + " => " + group.count() + "; ")
        .subscribe(sb::append);

    return "flux 4: " + sb.toString();
}

我打印了 group.key() 但是如何打印 group.count() 呢?

欢迎任何帮助

干杯

胡安

我想我和你看的是同一本书:)

这是使用 block() 的解决方案。

        Flux.just("alpha", "beta", "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(Tuples.of(group.key(), group.count().block()))) 
        .map(keyAndCount -> keyAndCount.getT1() + " => " + keyAndCount.getT2() + "; ")

我想知道是否有不调用 block() 的替代方法?现在group.count()returns一个Mono<Long>group.key()returns一个String。如果我们可以将两者结合起来形成一个 Mono<Tuple2<String, Long>> 而不必评估 Mono 的结果,那就太好了。似乎应该有一个通用的方法来做到这一点?

本书尝试使用:

Mono.just(group.key()).and(group.count())

但这只是监听完成事件和 returns 一个 Mono<Void>,因此给我编译错误...

附录:找到了!使用zip方法:

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