在Kotlin语言的官方文档中,有一个zipWithNext函数,如下所示。

val letters = listOf("a", "b", "c", "d", "e", "f")
val pairs = letters.zipWithNext {a, b -> a + b} // [ab, bc, cd, de, ef]

有没有一种方法可以仅汇总此列表的部分元素,而其余部分保持不变?
为了进行比较,可以使用另一个listOf("bc", "de")
在这种情况下,最终输出应类似于[a, bc, de, f]

最佳答案

我认为初始列表的大小是偶数,否则您将无法获得预期的结果。
对于

val letters = listOf("a", "b", "c", "d", "e", "f")

zipWithNext():
val pairs = (listOf("") + letters + listOf(""))
        .zipWithNext()
        .filterIndexed { index, _ -> index % 2 == 0 }
        .map { it.first + it.second }

chunked(2):
val pairs = listOf(letters.first()) +
            letters.subList(1, letters.size - 1).chunked(2).map { it[0] + it[1] } +
            listOf(letters.last())

两者都给出以下结果:
[a, bc, de, f]

编辑
至于比较 list :
fun getNewList(list: List<String>, comparison: List<String>) : List<String> {
    val newList = mutableListOf<String>()
    var flag = false
    list.forEachIndexed { i, s ->
        if (i < list.size - 1) {
            if (!flag) {
                val item = s + list[i + 1]
                if (comparison.contains(item)) {
                    newList.add(item)
                    flag = true
                } else {
                    newList.add(s)
                }
            } else {
                flag = false
            }
        } else {
            newList.add(s)
        }
    }
    return newList
}

此代码:
val letters = listOf("a", "b", "c", "d", "e", "f")
val comparison = listOf("bc", "de")
val newList = getNewList(letters, comparison)
println(newList)

将打印:
[a, bc, de, f]

关于lambda - 有没有一种方法可以使用zipWithNext kotlin压缩列表中的部分值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54385946/

10-10 04:59