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() + "; ")
大家好,全世界的校长们。我在 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() + "; ")