Вы можете использовать функцию takeIf
для условий встраивания. Он возвращает null
, если предикат имеет значение false, что позволяет вам связать его в ?:
.
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)
}
}