Provide the emptySequence() method.

sequenceOf() with no arguments is equivalent to emptySequence().
#KT-7233 Fixed
This commit is contained in:
Ilya Gorbunov
2015-04-10 21:00:21 +03:00
parent ae28379493
commit ade69ec0e9
2 changed files with 22 additions and 7 deletions
@@ -53,7 +53,7 @@ public fun<T> Enumeration<T>.asSequence(): Sequence<T> = this.iterator().sequenc
/**
* Creates a sequence that returns the specified values.
*/
public fun <T> sequenceOf(vararg elements: T): Sequence<T> = elements.asSequence()
public fun <T> sequenceOf(vararg elements: T): Sequence<T> = if (elements.isEmpty()) emptySequence() else elements.asSequence()
/**
* Creates a sequence that returns all values in the specified [progression].
@@ -62,6 +62,20 @@ public fun <T> sequenceOf(progression: Progression<T>): Sequence<T> = object : S
override fun iterator(): Iterator<T> = progression.iterator()
}
/**
* Returns an empty sequence.
*/
public fun <T> emptySequence(): Sequence<T> = EmptySequence
private object EmptySequence : Sequence<Nothing> {
override fun iterator(): Iterator<Nothing> = EmptySequenceIterator
}
private object EmptySequenceIterator : Iterator<Nothing> {
override fun next(): Nothing = throw NoSuchElementException("Sequence is empty.")
override fun hasNext(): Boolean = false
}
deprecated("Use FilteringSequence<T> instead")
public class FilteringStream<T>(stream: Stream<T>, sendWhen: Boolean = true, predicate: (T) -> Boolean)
: Stream<T> by FilteringSequence<T>(stream.toSequence(), sendWhen, predicate)
@@ -20,15 +20,16 @@ fun fibonacci(): Sequence<Int> {
public class SequenceTest {
test fun filterEmptySequence() {
val sequence = sequenceOf<String>()
assertEquals(0, sequence.filter { false }.count())
assertEquals(0, sequence.filter { true }.count())
for (sequence in listOf(emptySequence<String>(), sequenceOf<String>())) {
assertEquals(0, sequence.filter { false }.count())
assertEquals(0, sequence.filter { true }.count())
}
}
test fun mapEmptySequence() {
val sequence = sequenceOf<String>()
assertEquals(0, sequence.map { false }.count())
assertEquals(0, sequence.map { true }.count())
for (sequence in listOf(emptySequence<String>(), sequenceOf<String>())) {
assertEquals(0, sequence.map { true }.count())
}
}
test fun requireNoNulls() {