如何在spring reactor中将两个发布者合二为一

Ser*_*man 4 project-reactor spring-webflux

我已经实现了一个虚拟的反应式存储库,但我正在努力使用更新方法:

@Override
public Mono<User> updateUser(int id, Mono<User> updateMono) {
    return  //todo with getUser
}

@Override
public Mono<User> getUser(int id) {
    return Mono.justOrEmpty(this.users.get(id));
}
Run Code Online (Sandbox Code Playgroud)

一方面我有新的出版商Mono<User> updateMono,另一方面我在Mono.justOrEmpty(this.users.get(id)).

如何将其组合在一起,进行更新并只回馈一个发布者?

我唯一想到的是:

@Override
public Mono<User> updateUser(int id, Mono<User> updateMono) {
    return  getUser(id).doOnNext(user -> {
        updateMono.subscribe(update -> {
            users.put(id, new User(id, update.getName(), update.getAge()));
            System.out.format("Updated user with id %d to %s%n", id, update);
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?

Sim*_*slé 5

请参阅有关寻找合适操作员的参考指南

值得注意的是,因为Mono你有and, when, then(注意最后一个将flatMap在 3.1.0 中变为,而 flatmap 将变为flatMapMany

doOnNext更多用于诸如日志记录或统计信息收集之类的辅助操作。subscribe 里面的 subscribe 是另一种不好的形式;通常你想要flatMap或类似的。