Java Flux GroupedFlux count() 打印

Jua*_*dor 6 java project-reactor

嗨,全世界的校长们。我正在用 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();
}
Run Code Online (Sandbox Code Playgroud)

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

欢迎任何帮助

干杯

胡安

Dar*_*ren 5

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

这是使用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() + "; ")
Run Code Online (Sandbox Code Playgroud)

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

这本书试图使用:

Mono.just(group.key()).and(group.count())
Run Code Online (Sandbox Code Playgroud)

但这只是侦听完成事件并返回 a 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() + "; ")
Run Code Online (Sandbox Code Playgroud)