You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:54:33