It’s not hard to write. For example:
fun <T> Sequence<T>.chunkedOnThreshold(condition: (T) -> Boolean): Sequence<List<T>> = buildSequence {
val buffer = mutableListOf<T>()
for (element in this@chunkedOnThreshold) {
buffer += element
if (condition(element)) {
yield(buffer)
buffer.clear()
}
}
if (buffer.isNotEmpty()) yield(buffer)
}
Test
fun main(args: Array<String>) {
// (1..60).asSequence().chunkedOnThreshold { it % 7 == 0 }.forEach { println(it) }
val random = Random()
generateSequence { random.nextInt(10) }
.take(100)
.chunkedOnThreshold { it % 7 == 0 }
.forEach(::println)
}