android - 使用 Kotlin 函数特性如何使这段代码变得更好?
问题描述
我有这些代码,我不喜欢我有 mapNotNull 并且在里面我有其他返回 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 返回的类型
推荐阅读
- angular - 循环遍历数据数组并将 from 控件名称提供给输入字段无法正常工作?
- javascript - 跳转到
当单击文本字段时 - ffmpeg - Discord Music Bot 加入语音通道,亮绿色但没有任何音频。2周前效果很好。控制台没有错误
- swift - 在不使用设备摄像头的情况下创建自定义 AR 快速查看体验
- r - 如何在 R 中导出变量标签?
- translation - PO 文件问题 1 错误无处可寻和标题中的问题
- c - 编译第三方库时指向 void 错误的算术
- python - 是否可以使用 Graphviz 创建复杂的图像(如跨功能流程图)?
- string - 将字符串复制到另一个变量 x86 程序集
- python - 如何在 Python 中使用 pydrive 在 Google Drive 中查找子文件夹 ID?