rrva
03/14/2022, 12:36 PMval l = listOf(”P”, ”s”, ”P”, ”s”, ”s”, ”P”, ”P”, ”s”)
l.foo() -> [[”P”, ”s”], [”P”, ”s”, ”s”], [”P”], [”P”, ”s”]]
marcinmoskala
03/14/2022, 2:42 PMfun List<String>.foo(): List<List<String>> = this
.fold(emptyList<List<String>>()) { acc, v ->
if (v == "s") acc.dropLast(1) + listOf(acc.lastOrNull().orEmpty() + v)
else acc + listOf(mutableListOf(v))
}
nkiesel
03/15/2022, 12:22 AMfun <T> List<T>.chunkedAt(selector: (T) -> Boolean): List<List<T>> =
fold(mutableListOf(mutableListOf<T>())) { acc, item ->
if (selector(item) && acc.last().isNotEmpty()) {
acc.add(mutableListOf<T>())
}
acc.last().add(item)
acc
}
fun List<String>.foo() = chunkedAt { it.firstOrNull()?.isUpperCase() ?: false }
nkiesel
03/15/2022, 12:28 AM