在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/