优化 when 表达式 Kotlin 中的重复代码

Optimising a repeating code in when expression Kotlin

我的方法之一 returns 根据列表元素的布尔值,其大小可以从 0 到 4。我使用了 when 表达式,但“问题”是我的代码重复(冗余)。这是:

list.apply {
    return when (size) { //size in 0..4
        0 -> false
        1 -> get(0) == 9
        2 -> get(0) == 9 || get(0) == get(1) || get(0) + get(1) == 8
        3 -> get(0) == 9 || get(0) == get(1) || get(0) + get(1) == 8 || get(0) == get(2) || get(0) + get(2) == 8
        else -> get(0) == 9 || get(0) == get(1) || get(0) + get(1) == 8 || get(0) == get(2) || get(0) + get(2) == 8 || get(0) == get(3) || get(0) + get(3) == 8 // when size == 4
    }
}

如您所见,下面的代码有很多重复。我找到了另一个解决方案,这个几乎不会重复,但我的印象是可以缩短代码(也许我错了?)。这是另一个版本(仍然在内联函数apply):

var rtn = false
if (size > 0) rtn = rtn || get(0) == 9
if (size > 1) rtn = rtn || get(0) == get(1) || get(0) + get(1) == 8
if (size > 2) rtn = rtn || get(0) == get(2) || get(0) + get(2) == 8
if (size > 3) rtn = rtn || get(0) == get(3) || get(0) + get(3) == 8
return rtn

有什么办法可以进一步缩短或优化代码吗?在这两个版本中,哪个版本更受欢迎,为什么?

val result = with(list) {
    isNotEmpty() && (first() == 9 || (1..lastIndex).any { first() == get(it) || first() + get(it) == 8 })
}