繁体   English   中英

Java mono 用 arguments 调用 void 方法

[英]Java mono call void method with arguments

我有以下方法:

void save(User user);

我在这个 function 中调用了这个方法:

userRepository.findById(id)
              .flatMap(user -> {
                   userRepository.save(user);

                   return Mono.just(userMapper.map(user));
              });

有没有一种方法可以调用save方法而无需使用flatMap

我尝试了then但它不接受 lambdas?

还有其他选择吗?

谢谢

peek在这里似乎很有用,也许?

userRepository.findById(id)
  .peek(this::save)
  .map(userMapper);

reactor.core.publisher.Mono提供了根据需要或信号运行的各种方法。 不知道为什么不想使用flatMap 您可以使用Mono的各种其他方法来调用repository.save(...) 例如

  • map() - 接受 lamda/Function object 提供 T 输入和 R 返回
  • doOnNext - 需要 lamda/Consumer object 需要 T
  • doOnEach - 需要 lamda/Consumer object 需要 T
  • doOnSubscribe - 需要 lamda/Consumer object 需要 T

这些所有方法都会评估何时订阅 Mono。

也不确定您正在使用哪个存储库,因为大多数Repository (来自 Spring 数据反应式)在持久性后返回 object 例如:

<S extends T> Mono<S> save(S entity)

如果需要从数据库中加载 object 更新并返回它,那么可以考虑以下代码作为示例:

fun update(id: Long, person: Person): Mono<Person> {
        return personRepository
            .findById(id)
            .map {it ->
                    p?.let {
                        it.name = p.name
                        it.password = p.password
                    }
                return@map it
                }.flatMap(personRepository::save)
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM