gpt4 book ai didi

java - 如何在 Kotlin 中维护这个复杂的 if-else 语句

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:59:39 35 4
gpt4 key购买 nike

我编写了一个函数,根据请求参数从数据库中获取信息。下面的 if-else 语句是一个大问题。如果我们继续添加更多过滤器,我们需要继续为所有可能的路径添加语句。

    fun getMessages(name: String, pageable: Pageable, locale: String?, subject: String?,
recipient: String?): Page<MessageDTO>? {

val messagePageable= if (!locale.isNullOrEmpty() && !subject.isNullOrEmpty() && !recipient.isNullOrEmpty()) {
messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!)
.and(hasSubject(subject!!).and(hasRecipient(recipient!!))))), pageable)
} else if (!locale.isNullOrEmpty()) {
messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!))), pageable)
} else if (!subject.isNullOrEmpty()) {
messageRepository.findAll(where(hasMessageName(name).and(hasSubject(subject!!))), pageable)
} else {
messageRepository.findAll(where(hasMessageName(name)), pageable)
}
return messagePageable.map { messageMapper.toMessageDTO(it) }.takeIf { it.content.isNotEmpty() }
}

应该有更好的写法。感谢您的帮助。

最佳答案

我不确定,但也许一些重构会有所帮助。例如,您似乎正在对数据库使用某种请求,如果根据参数填充,那么也许可以像这样管理它。

fun getMessages(name: String, pageable: Pageable, locale: String?, subject: String?,
recipient: String?): Page<MessageDTO>? {
val request = where(hasMessageName(name))
locale?.let{ request.and(hasLocale(it)) }
subject?.let{ request.and(hasSubject(it)) }
recipient?.let{ request.and(hasRecipient(it))}

return messageRepository.findAll(request, pageable)
.map { messageMapper.toMessageDTO(it) }
.takeIf { it.content.isNotEmpty() }
}

在这里,我不确定 .and() 方法是如何工作的,所以它可能应该是这样的:request = request.and(...)

关于java - 如何在 Kotlin 中维护这个复杂的 if-else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57308480/

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