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 ( )
}
}
2019-10-09 12:01:53 +02:00
/ * *
* Modifies the current [ Sequence ] by adding a peek ( ) method
* that returns the next element or null without advancing the sequence .
* Calling peek ( ) multiple times without next ( ) will return the same value .
* /
fun < T > Sequence < T > . peekable ( ) : PeekableSequence < T > {
return PeekableSequence ( this )
}