簡體   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