Sekwences/src/main/kotlin/moe/kageru/sekwences/Sekwences.kt

21 lines
759 B
Kotlin
Raw Normal View History

2019-10-07 23:19:48 +02:00
package moe.kageru.sekwences
/**
* Returns a sequences that optionally merges adjacent elements.
* Heavily inspired by Itertools.coalesce() from the Rust crate.
*
2019-10-07 23:25:23 +02:00
* The merge function will be passed two adjacent elements in the sequence.
* If the two can be merged, the result of the merging process should be returned.
* If null is returned, the first of the two elements is returned,
* and the second will be used as the first element in the next merge operation.
*
2019-10-07 23:19:48 +02:00
* https://docs.rs/itertools/0.8.0/itertools/trait.Itertools.html#method.coalesce
*/
fun <T> Sequence<T>.coalesce(merger: (T, T) -> T?): Sequence<T> {
return if (this.iterator().hasNext()) {
CoalescingSequence(this, merger)
} else {
emptySequence()
}
}