使用 Kotlin 函数特性如何使这段代码更好?
How it is possible using Kotlin function features make this piece of code nicer?
我有这些代码,我不喜欢我有 mapNotNull 并且在里面我还有其他 returns null 的情况,我认为我的 kotlin 知识不足以让它变得更好,任何想法?
return config.mainMenus.mapNotNull { mainMenu ->
val subPage = config.subPages.find {
if (mainMenu.actions.isNotEmpty()) {
it.id == mainMenu.actions.first().contentId
} else {
false
}
}
if (subPage?.items?.isNotEmpty() != null) {
MenuItem(mainMenu.type, mainMenu.titles, mainMenu.actions[0].type, subPage.items)
} else {
null
}
}
}
val programs = cards.mapNotNull { card ->
if (card is Program) {
epgRepository.getProgramProgress(currentTime = currentTime, program = card)
} else {
null
}
}
您可以将之前的代码替换为
return config.mainMenus.mapNotNull { mainMenu ->
config.subPages
.find{mainMenu.actions.firstOrNull()?.contentId?.equals(it.id)?:false}
?.let{menu->
MenuItem(mainMenu.type, mainMenu.titles, mainMenu.actions[0].type, menu.items).takeIf{menu.items?.isNotEmpty()==true}
}?:null
}
}
第二个可能是
val programs = cards.
filterIsInstance<Program>().
map { epgRepository.getProgramProgress(currentTime = currentTime, program = card)}
在这种情况下,您首先过滤集合,只获取程序元素,并且只有那些元素被转换为函数 getProgramProcess return
的类型
我有这些代码,我不喜欢我有 mapNotNull 并且在里面我还有其他 returns null 的情况,我认为我的 kotlin 知识不足以让它变得更好,任何想法?
return config.mainMenus.mapNotNull { mainMenu ->
val subPage = config.subPages.find {
if (mainMenu.actions.isNotEmpty()) {
it.id == mainMenu.actions.first().contentId
} else {
false
}
}
if (subPage?.items?.isNotEmpty() != null) {
MenuItem(mainMenu.type, mainMenu.titles, mainMenu.actions[0].type, subPage.items)
} else {
null
}
}
}
val programs = cards.mapNotNull { card ->
if (card is Program) {
epgRepository.getProgramProgress(currentTime = currentTime, program = card)
} else {
null
}
}
您可以将之前的代码替换为
return config.mainMenus.mapNotNull { mainMenu ->
config.subPages
.find{mainMenu.actions.firstOrNull()?.contentId?.equals(it.id)?:false}
?.let{menu->
MenuItem(mainMenu.type, mainMenu.titles, mainMenu.actions[0].type, menu.items).takeIf{menu.items?.isNotEmpty()==true}
}?:null
}
}
第二个可能是
val programs = cards.
filterIsInstance<Program>().
map { epgRepository.getProgramProgress(currentTime = currentTime, program = card)}
在这种情况下,您首先过滤集合,只获取程序元素,并且只有那些元素被转换为函数 getProgramProcess return
的类型