Java Flux GroupedFlux count()打印

时间:2017-12-21 11:35:24

标签: java project-reactor

世界各地的校长们。我正在使用Java进行重新编程。我是一个java / grails / react开发人员,但在这种情况下,首先使用Spring Boot,版本2 M7进行反应式编程。在下一个代码中:

{{1}}

我打印了group.key()但是我怎么打印了group.count()?

欢迎任何帮助

干杯

1 个答案:

答案 0 :(得分:3)

我想我正在和你读同一本书:)

以下是使用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()返回Mono<Long>group.key()返回String。如果我们可以将两者结合起来形成Mono<Tuple2<String, Long>>而不必评估Mono的结果,那将是很好的。似乎应该有一个通用的方法来做到这一点?

这本书试图使用:

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

但是这只是监听完成事件并返回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() + "; ")