gpt4 book ai didi

带条件的 Kotlin 复制函数

转载 作者:行者123 更新时间:2023-12-01 12:10:25 25 4
gpt4 key购买 nike

有没有办法在条件状态未验证的情况下使用 copy Kotlin 函数并使用原始对象值属性?或者类似的功能?

示例:

data class UserEntity(
id = String,
email = String,
firstName = String,
lastName = String
)

data class UserUpdate(
firstName = String?,
lastName = String?
)

@Service
class UserService(userRepository: UserRepository) {

fun update(id: String, dto: UserUpdate) = userRepository.save(
userRepository.findById(id).copy(
// *it* is not available as the initial object the
// copy function is called from.
firstName = dto.firstName ?: it.firstName,
// I'd like something like:
lastName = dto.lastName ?: keepTheOriginalLastNameProperty
)
)

}

最佳答案

您可以使用 takeIf内联条件函数。如果谓词为假,它会返回 null,这样您就可以将它链接到 ?: 中。

firstName = dto.firstName.takeIf { it.isNotEmpty() } ?: user.firstName

可以和let很好的结合.

val something = other.takeIf { it.someBool }?.let { Something(it) } ?: throw Exception()

编辑:作为对您编辑的回应,不幸的是,我看到的最佳选择是:

fun update(id: String, dto: UserUpdate) = run {
userRepository.findById(id).let { user ->
val firstName = dto.firstName ?: user.firstName
val lastName = dto.lastName ?: user.lastName
user.copy(firstName = firstName, lastName = lastName)
}.let {
userRepository.save(it)
}
}

关于带条件的 Kotlin 复制函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52043374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com