我想将列表中的项目分组为具有相同类型的保留和顺序。但前提是他们互相跟随。 还有比简单更聪明的方法吗?
输入:
A A B A A A A C C A
输出:
A A
B
A A A A
C C
A
这是使用序列的解决方案
fun collectSame(src: List<String>): Sequence<Pair<String, List<String>>> = sequence {
var currentGroupKey: String? = null
val collector = mutableListOf<String>()
src.forEach {
if(currentGroupKey==null || currentGroupKey != it) {
currentGroupKey = it
if(collector.isNotEmpty()) {
yield(currentGroupKey!! to collector)
collector.clear()
}
}
collector.add(it)
}
}
fun main(args: Array<String>) {
val answer = collectSame(listOf("A","A","B","A","A","A","A","C","C","A"))
answer.forEach {
println(it.second)
}
}
输出
[A, A]
[B]
[A, A, A, A]
[C, C]
可能有某种方法可以比我的解决方案更好
grouping
。