用Flux声明的优雅方式

我有以下kotlin方法,该方法当前使用一个非反应式mongodb存储库(弹簧数据),该存储库返回一个列表。

  fun register(userRegistration: UserRegistration) {
    val existing = userRepository.findByTokenOrUserId(userRegistration.devicetoken,userRegistration.userId)
    var alreadyRegistered = false
    if (existing.isnotEmpty()) {
      existing.forEach {
        if (!isAlreadyRegistered(it,userRegistration)) {
          userRepository.delete(it)
        } else {
          alreadyRegistered = true
        }
      }
    }
    if (!alreadyRegistered) {
      val pnUser = PnUser(userRegistration.userId,userRegistration.devicetoken,userRegistration.region,userRegistration.locale,userRegistration.deviceType,userRegistration.osVersion,userRegistration.appVersion,userRegistration.timezone)
      userRepository.save(pnUser)
    }

  }

如果userRepository.findByTokenOrUserId将返回PnUser的流量而不是List,我如何以一种优雅的方式具有相同的行为?

谢谢

lytaianly 回答:用Flux声明的优雅方式

@Markus指出,最优雅的方法是使用Flux分割Flux.groupBy,然后对每个键进行逻辑运算。

查看this answer以获得更多信息:

,

这并不完全相同,但对我来说会做到:

fun registerUser(userRegistration: UserRegistration) {
userReactiveRepository.findByTokenOrUserId(userRegistration.userId,userRegistration.userId).map {
  if (!isAlreadyRegistered(it,userRegistration)) {
    userReactiveRepository.delete(it).map {
      val pnUser = PnUser(userRegistration.userId,userRegistration.deviceToken,userRegistration.region,userRegistration.locale,userRegistration.deviceType,userRegistration.osVersion,userRegistration.appVersion,userRegistration.timezone)
      userReactiveRepository.save(pnUser)
    }
  }
}

}

本文链接:https://www.f2er.com/3072801.html

大家都在问