如何将列表中每两个相等的元素合并为一个元素,合并过程由lambda函数指定。
例如,如果我有这样的列表
[“ a”,“ a”,“ b”,“ b”]
合并过程为{it.repeat(2)}
应该是这样的:
[“ aa”,“ bb”]
但是如果列表是这样的:
[“ a”,“ a”,“ a”]
应将其转换为
[“ aa”,“ a”]
另一个例子是:
[“ a”,“ b”,“ a”,“ b”]
将是
[“ a”,“ b”,“ a”,“ b”]
我尝试了zipWithNext()
,但我不知道下一步该怎么做,尤其是当同一字母重复两次以上时。
如何使用Kotlin的功能编程方式在Kotlin中实现这种方式。
答案 0 :(得分:1)
这是非常低效的解决方案,但理想解决方案。根据要求,我已尽可能使用functional programming
。希望你会喜欢。但是,如果使用loop
或regular expression
来解决此问题,将非常容易。
在这个问题中,不需要功能样式。
fun main(args: Array<String>) {
val list = listOf("a", "a", "a", "a", "b", "b", "b", "b")
//val list = listOf("a", "a", "a", "b", "a")
var temp = false
val result = list.zipWithNext().map {
if (temp) {
temp = false
null
} else {
if (it.first == it.second) {
temp = true
it.first + it.second
} else {
it.first
}
}
}.filter { !it.isNullOrBlank() }.toMutableList()
if (!temp) {
result.add(list.last())
}
print(result)
}