kotlin - 如何在 Optional 中将两种类型应用于 orElse()
问题描述
我想在Optional中使用orElse()函数,但前半部分“engineRepository.findById(engineId)”返回模型,后半部分返回模型列表,如何让结果返回列表?
我尝试将 listof() 添加到前半部分,但我不能再使用 orElse() 了,该怎么做?
var ModelList: List<Model> = try {
EngineRepository.findById(engineId).orElse(EngineRepository.findAllByEnvironment(environment)))
}
@Repository
interface EngineRepository : MongoRepository<Model, String> {
fun findAllByEnvironment(environment: String):List<Model>
}
解决方案
您确实应该使用listOf
,但不应将整个表达式传递EngineRepository.findById(engineId)
给它,而应将其应用于被返回的Model
包装内。为此,请使用:Optional
findById
map
EngineRepository.findById(engineId)
.map(::listOf)
.orElse(EngineRepository.findAllByEnvironment(environment))
请注意,findAllByEnvironment
无论是否findById
返回Optional.empty()
. 如果你不想这样,你应该使用orElseGet
:
.orElseGet { EngineRepository.findAllByEnvironment(environment) }
推荐阅读
- android - 如何仅允许经过身份验证的用户在 Firebase Firestore 中创建集合?
- asp.net - ASP.Net MVC 5 中的实时编码
- python - 了解 encode() 和 bytearray 之间的区别
- deep-learning - 尽管所有设置看似正确,但 Pytorch 并未使用 GPU
- python - Python 代码被 AsyncIO 任务卡住了
- r - 如何在R中的栅格上应用具有多个参数的函数?
- python - 如何在 python tkinter 中制作自定义消息框?
- jquery - 带有 DataTables 的表中的外部链接(jQuery 插件)
- r - 为什么我的函数无法给出正确的输出
- angular - 错误:无法将 @Input 装饰器与查询装饰器结合使用