世界各地的校长们。我正在使用Java进行重新编程。我是一个java / grails / react开发人员,但在这种情况下,首先使用Spring Boot,版本2 M7进行反应式编程。在下一个代码中:
{{1}}
我打印了group.key()但是我怎么打印了group.count()?
欢迎任何帮助
干杯
涓
答案 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() + "; ")