Kotlin 将以下具有相同类型的项目分组并保留顺序

问题描述 投票:0回答:1

我想将列表中的项目分组为具有相同类型的保留和顺序。但前提是他们互相跟随。 还有比简单更聪明的方法吗?

输入:

A A B A A A A C C A

输出:

A A
B
A A A A
C C 
A
list algorithm kotlin grouping
1个回答
0
投票

这是使用序列的解决方案

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

© www.soinside.com 2019 - 2024. All rights reserved.