Kotlin实现默认值未修改检测的代码优化方案咨询
Kotlin 列表校验弹窗逻辑优化
你的现有逻辑可正常运行,但存在标记位冗余、遍历效率低、UI构建代码繁琐的问题,可按Kotlin惯用写法重构,代码更简洁易维护。
原逻辑目标
- 点击发送按钮时,先筛选出所有勾选了异常标记(
it.Exception == true)的列表条目 - 校验这些已标记异常的条目中,是否存在
EReason字段仍为默认提示Select a reason(即用户未选择异常原因)的项 - 若存在未填原因的异常项,弹出提示对话框;否则走后续正常发送流程
重构后代码
btnSend.setOnClickListener { // 直接通过集合API完成过滤+校验,无需额外临时变量和标记位 val existUnselectedReason = partsList .filter { it.Exception } .any { it.EReason.contains("Select a reason") } if (existUnselectedReason) { // 链式调用简化AlertDialog构建,无需重复持有builder实例 AlertDialog.Builder(this) .setMessage("Please select a reason for the current exception") .setIcon(android.R.drawable.ic_dialog_alert) .setNeutralButton("Cancel") { _, _ -> } .setCancelable(true) .show() } else { // 原有后续业务逻辑 } }
核心优化点
- 移除无意义的整型标记位
x,改用集合any()API直接返回校验结果:any()在找到第一个符合条件的条目时就会终止遍历,相比全量执行的forEach性能更好,代码语义也更清晰 - 移除多余的中间
ArrayList创建,过滤操作后直接衔接校验逻辑,减少不必要的内存开销 - 利用Builder的链式调用特性简化对话框构建代码,去掉冗余的builder、alertDialog临时变量赋值,代码更连贯
- 变量命名语义化,看到
existUnselectedReason就能直接理解变量含义,不需要额外追溯变量赋值逻辑
内容的提问来源于stack exchange,提问作者helpVulcan
相关产品推荐
相关产品推荐

