如何解决Reactor编程中Void类无法解析getT1、getT2方法的报错
问题原因
该错误和方法定义为void没有关联,核心是flatMap操作中Mono组合逻辑的用法错误:
- Reactor 中
Mono.and(OtherPublisher)的作用仅为等待两个发布者都触发完成信号,最终只会返回无实际值的Void类型完成信号,不会将两个Mono的返回结果组合为元组对象。 - 后续
map操作中拿到的keyAndCount实际是Void类型,自然不存在getT1、getT2方法,因此抛出对应错误。
修复方案
将Mono.just(group.key()).and(group.count())替换为Mono.zip方法,zip操作会将多个Mono的返回结果组合为Tuple类型,即可正常调用getT1、getT2方法读取值。
修正后完整代码:
public void countLetters() { Flux.just("alpha", "bravo", "charlie") .map(String::toUpperCase) .flatMap(s -> Flux.fromArray(s.split(""))) .groupBy(String::toString) .sort(Comparator.comparing(GroupedFlux::key)) // 替换原and逻辑为zip组合 .flatMap(group -> Mono.zip(Mono.just(group.key()), group.count())) .map(keyAndCount -> keyAndCount.getT1() + " => " + keyAndCount.getT2()) .subscribe(System.out::println); }
内容的提问来源于stack exchange,提问作者runnerpaul
相关产品推荐
相关产品推荐

