Я предполагаю, что размер начального списка является четным числом, иначе вы не сможете получить ожидаемый результат.
Для
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]
Редактировать
Что касается списка сравнения:
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]