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

Kotlin中如何借助外部布尔变量从ArrayList获取对应值?

优雅实现根据布尔值从ArrayList的Color数据类中获取对应颜色值

针对你的需求,完全可以通过Kotlin扩展函数实现,而且不需要使用forEach循环,下面提供两种更优雅的方案:

方案一:给可空Color类型写扩展函数(推荐)

这种方式最灵活,既能处理find可能返回null的情况,又能让链式调用更简洁:

// 扩展可空Color类型,根据布尔值返回对应颜色,同时处理null场景
fun Color?.getTargetColor(isDone: Boolean, defaultColor: Int = 0): Int {
    return this?.let {
        if (isDone) it.colorA else it.colorB
    } ?: defaultColor
}

在你的函数中使用:

private val isDone = true // 或false
private const val TEXT = "text"
private const val BACK = "back"

private fun color(key: String): Int {
    val colors = arrayListOf(
        Color(TEXT, R.color.text_light, R.color.text_night),
        Color(BACK, R.color.background_light, R.color.background_night),
        // 其他Color实例
    )

    // 链式调用,完全符合你期望的简洁逻辑
    return colors.find { it.key == key }.getTargetColor(isDone, R.color.default_color)
}

方案二:给ArrayList写扩展函数

如果想直接在ArrayList上完成查找+取值的逻辑,也可以给ArrayList写专属扩展:

// 直接在ArrayList上根据key和布尔值获取目标颜色
fun ArrayList<Color>.getColorByKey(key: String, isDone: Boolean, defaultColor: Int = 0): Int {
    return this.find { it.key == key }?.let {
        if (isDone) it.colorA else it.colorB
    } ?: defaultColor
}

在你的函数中使用:

private fun color(key: String): Int {
    val colors = arrayListOf(
        Color(TEXT, R.color.text_light, R.color.text_night),
        Color(BACK, R.color.background_light, R.color.background_night),
        // 其他Color实例
    )

    return colors.getColorByKey(key, isDone, R.color.default_color)
}

说明

  • 两种方案都避免了forEach循环,利用Kotlin的扩展函数特性实现了优雅的调用
  • 方案一的扩展性更强,任何地方的Color(或Color?)实例都能复用这个颜色选择逻辑
  • 代码中加入了默认颜色参数,避免find找不到对应key时出现空指针异常

内容的提问来源于stack exchange,提问作者Mark Delphi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:24:16