asSequence returns empty sequence singleton for empty arrays and strings.
#KT-8450 Fixed
This commit is contained in:
@@ -14,6 +14,7 @@ import java.util.Collections // TODO: it's temporary while we have java.util.Col
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun <T> Array<out T>.asSequence(): Sequence<T> {
|
public fun <T> Array<out T>.asSequence(): Sequence<T> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<T> {
|
return object : Sequence<T> {
|
||||||
override fun iterator(): Iterator<T> {
|
override fun iterator(): Iterator<T> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -25,6 +26,7 @@ public fun <T> Array<out T>.asSequence(): Sequence<T> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun BooleanArray.asSequence(): Sequence<Boolean> {
|
public fun BooleanArray.asSequence(): Sequence<Boolean> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Boolean> {
|
return object : Sequence<Boolean> {
|
||||||
override fun iterator(): Iterator<Boolean> {
|
override fun iterator(): Iterator<Boolean> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -36,6 +38,7 @@ public fun BooleanArray.asSequence(): Sequence<Boolean> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun ByteArray.asSequence(): Sequence<Byte> {
|
public fun ByteArray.asSequence(): Sequence<Byte> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Byte> {
|
return object : Sequence<Byte> {
|
||||||
override fun iterator(): Iterator<Byte> {
|
override fun iterator(): Iterator<Byte> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -47,6 +50,7 @@ public fun ByteArray.asSequence(): Sequence<Byte> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun CharArray.asSequence(): Sequence<Char> {
|
public fun CharArray.asSequence(): Sequence<Char> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Char> {
|
return object : Sequence<Char> {
|
||||||
override fun iterator(): Iterator<Char> {
|
override fun iterator(): Iterator<Char> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -58,6 +62,7 @@ public fun CharArray.asSequence(): Sequence<Char> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun DoubleArray.asSequence(): Sequence<Double> {
|
public fun DoubleArray.asSequence(): Sequence<Double> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Double> {
|
return object : Sequence<Double> {
|
||||||
override fun iterator(): Iterator<Double> {
|
override fun iterator(): Iterator<Double> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -69,6 +74,7 @@ public fun DoubleArray.asSequence(): Sequence<Double> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun FloatArray.asSequence(): Sequence<Float> {
|
public fun FloatArray.asSequence(): Sequence<Float> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Float> {
|
return object : Sequence<Float> {
|
||||||
override fun iterator(): Iterator<Float> {
|
override fun iterator(): Iterator<Float> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -80,6 +86,7 @@ public fun FloatArray.asSequence(): Sequence<Float> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun IntArray.asSequence(): Sequence<Int> {
|
public fun IntArray.asSequence(): Sequence<Int> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Int> {
|
return object : Sequence<Int> {
|
||||||
override fun iterator(): Iterator<Int> {
|
override fun iterator(): Iterator<Int> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -91,6 +98,7 @@ public fun IntArray.asSequence(): Sequence<Int> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun LongArray.asSequence(): Sequence<Long> {
|
public fun LongArray.asSequence(): Sequence<Long> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Long> {
|
return object : Sequence<Long> {
|
||||||
override fun iterator(): Iterator<Long> {
|
override fun iterator(): Iterator<Long> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -102,6 +110,7 @@ public fun LongArray.asSequence(): Sequence<Long> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun ShortArray.asSequence(): Sequence<Short> {
|
public fun ShortArray.asSequence(): Sequence<Short> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Short> {
|
return object : Sequence<Short> {
|
||||||
override fun iterator(): Iterator<Short> {
|
override fun iterator(): Iterator<Short> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
@@ -142,6 +151,7 @@ public fun <T> Sequence<T>.asSequence(): Sequence<T> {
|
|||||||
* Returns a sequence from the given collection.
|
* Returns a sequence from the given collection.
|
||||||
*/
|
*/
|
||||||
public fun String.asSequence(): Sequence<Char> {
|
public fun String.asSequence(): Sequence<Char> {
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
return object : Sequence<Char> {
|
return object : Sequence<Char> {
|
||||||
override fun iterator(): Iterator<Char> {
|
override fun iterator(): Iterator<Char> {
|
||||||
return this@asSequence.iterator()
|
return this@asSequence.iterator()
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ fun sequences(): List<GenericFunction> {
|
|||||||
}
|
}
|
||||||
templates add f("asSequence()") {
|
templates add f("asSequence()") {
|
||||||
include(Maps)
|
include(Maps)
|
||||||
exclude(Sequences)
|
|
||||||
doc { "Returns a sequence from the given collection." }
|
doc { "Returns a sequence from the given collection." }
|
||||||
returns("Sequence<T>")
|
returns("Sequence<T>")
|
||||||
body {
|
body {
|
||||||
@@ -39,6 +38,17 @@ fun sequences(): List<GenericFunction> {
|
|||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body(ArraysOfObjects, ArraysOfPrimitives, Strings) {
|
||||||
|
"""
|
||||||
|
if (isEmpty()) return emptySequence()
|
||||||
|
return object : Sequence<T> {
|
||||||
|
override fun iterator(): Iterator<T> {
|
||||||
|
return this@asSequence.iterator()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
body(Sequences) {
|
body(Sequences) {
|
||||||
"""
|
"""
|
||||||
return this
|
return this
|
||||||
|
|||||||
Reference in New Issue
Block a user