Lambda 有没有办法使用zipWithNext kotlin压缩列表中的部分值?

Lambda 有没有办法使用zipWithNext kotlin压缩列表中的部分值?,lambda,kotlin,Lambda,Kotlin,在Kotlin语言的官方文档中,有一个函数ZipWithNextt,如下所示 val letters = listOf("a", "b", "c", "d", "e", "f") val pairs = letters.zipWithNext {a, b -> a + b} // [ab, bc, cd, de, ef] 是否有一种方法可以只汇总此列表中的部分元素,而不更改其余元素? 为了进行比较,您可以使用另一个列表(“bc”、“de”)。 在这种情况下,最终输出应该类似于[a,bc,

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

val letters = listOf("a", "b", "c", "d", "e", "f")
val pairs = letters.zipWithNext {a, b -> a + b} // [ab, bc, cd, de, ef]
是否有一种方法可以只汇总此列表中的部分元素,而不更改其余元素? 为了进行比较,您可以使用另一个
列表(“bc”、“de”)

在这种情况下,最终输出应该类似于
[a,bc,de,f]

我假设初始列表的大小是偶数,否则无法获得预期结果

为了

使用
zipWithNext()

分块(2)

两者都给出了这样的结果:

[a, bc, de, f]
编辑
至于比较清单:

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
}
将打印:

[a, bc, de, f]

也许兰姆达的某些状况会有所帮助?例如
val pairs=letters.zipWithNext{a,b->if(a.length>1 | | b.length>1){return@zipWithNexta}return@zipWithNexta+b}
谢谢你的回答。请告诉我如何做同样的事情,但将函数zipWithNext的结果与之前公布的
listOf(“bc”,“de”)
进行比较,换句话说,只将此列表中的值写入最终列表。其余部分保持不变。有一个初始列表:
listOf(“a”、“b”、“c”、“d”、“e”、“f”)
,这是:
listOf(“bc”、“de”)
。如果对初始列表应用
zipWithNext()
,您将得到:
[(a,b)、(b,c)、(c,d)、(d,e)、(e,f)]
。您希望在这个结果中进行什么样的比较?我希望该函数不仅适用于这个示例。如果我们将比较列表简化为
listOf(“bc”)
,我如何得到这个结果<代码>[a、bc、d、e、f]请参见我编辑的答案。如果我了解您的需求,这是一个算法解决方案,不涉及
zipWithNext()
[a, bc, de, f]
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]