21 lines
759 B
Kotlin
21 lines
759 B
Kotlin
package moe.kageru.sekwences
|
|
|
|
/**
|
|
* Returns a sequences that optionally merges adjacent elements.
|
|
* Heavily inspired by Itertools.coalesce() from the Rust crate.
|
|
*
|
|
* 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.
|
|
*
|
|
* 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()
|
|
}
|
|
}
|