Rename sequence() extension to asSequence()

This commit is contained in:
Ilya Gorbunov
2015-04-21 02:05:14 +03:00
parent 60347e87aa
commit 899a01e8c2
10 changed files with 216 additions and 80 deletions
+163 -50
View File
@@ -12,10 +12,10 @@ import java.util.Collections // TODO: it's temporary while we have java.util.Col
/**
* Returns a sequence from the given collection
*/
public fun <T> Array<out T>.sequence(): Sequence<T> {
public fun <T> Array<out T>.asSequence(): Sequence<T> {
return object : Sequence<T> {
override fun iterator(): Iterator<T> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -23,10 +23,10 @@ public fun <T> Array<out T>.sequence(): Sequence<T> {
/**
* Returns a sequence from the given collection
*/
public fun BooleanArray.sequence(): Sequence<Boolean> {
public fun BooleanArray.asSequence(): Sequence<Boolean> {
return object : Sequence<Boolean> {
override fun iterator(): Iterator<Boolean> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -34,10 +34,10 @@ public fun BooleanArray.sequence(): Sequence<Boolean> {
/**
* Returns a sequence from the given collection
*/
public fun ByteArray.sequence(): Sequence<Byte> {
public fun ByteArray.asSequence(): Sequence<Byte> {
return object : Sequence<Byte> {
override fun iterator(): Iterator<Byte> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -45,10 +45,10 @@ public fun ByteArray.sequence(): Sequence<Byte> {
/**
* Returns a sequence from the given collection
*/
public fun CharArray.sequence(): Sequence<Char> {
public fun CharArray.asSequence(): Sequence<Char> {
return object : Sequence<Char> {
override fun iterator(): Iterator<Char> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -56,10 +56,10 @@ public fun CharArray.sequence(): Sequence<Char> {
/**
* Returns a sequence from the given collection
*/
public fun DoubleArray.sequence(): Sequence<Double> {
public fun DoubleArray.asSequence(): Sequence<Double> {
return object : Sequence<Double> {
override fun iterator(): Iterator<Double> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -67,10 +67,10 @@ public fun DoubleArray.sequence(): Sequence<Double> {
/**
* Returns a sequence from the given collection
*/
public fun FloatArray.sequence(): Sequence<Float> {
public fun FloatArray.asSequence(): Sequence<Float> {
return object : Sequence<Float> {
override fun iterator(): Iterator<Float> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -78,10 +78,10 @@ public fun FloatArray.sequence(): Sequence<Float> {
/**
* Returns a sequence from the given collection
*/
public fun IntArray.sequence(): Sequence<Int> {
public fun IntArray.asSequence(): Sequence<Int> {
return object : Sequence<Int> {
override fun iterator(): Iterator<Int> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -89,10 +89,10 @@ public fun IntArray.sequence(): Sequence<Int> {
/**
* Returns a sequence from the given collection
*/
public fun LongArray.sequence(): Sequence<Long> {
public fun LongArray.asSequence(): Sequence<Long> {
return object : Sequence<Long> {
override fun iterator(): Iterator<Long> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -100,10 +100,10 @@ public fun LongArray.sequence(): Sequence<Long> {
/**
* Returns a sequence from the given collection
*/
public fun ShortArray.sequence(): Sequence<Short> {
public fun ShortArray.asSequence(): Sequence<Short> {
return object : Sequence<Short> {
override fun iterator(): Iterator<Short> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -111,10 +111,10 @@ public fun ShortArray.sequence(): Sequence<Short> {
/**
* Returns a sequence from the given collection
*/
public fun <T> Iterable<T>.sequence(): Sequence<T> {
public fun <T> Iterable<T>.asSequence(): Sequence<T> {
return object : Sequence<T> {
override fun iterator(): Iterator<T> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -122,10 +122,10 @@ public fun <T> Iterable<T>.sequence(): Sequence<T> {
/**
* Returns a sequence from the given collection
*/
public fun <K, V> Map<K, V>.sequence(): Sequence<Map.Entry<K, V>> {
public fun <K, V> Map<K, V>.asSequence(): Sequence<Map.Entry<K, V>> {
return object : Sequence<Map.Entry<K, V>> {
override fun iterator(): Iterator<Map.Entry<K, V>> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -133,7 +133,7 @@ public fun <K, V> Map<K, V>.sequence(): Sequence<Map.Entry<K, V>> {
/**
* Returns a sequence from the given collection
*/
public fun <T> Sequence<T>.sequence(): Sequence<T> {
public fun <T> Sequence<T>.asSequence(): Sequence<T> {
return this
}
@@ -142,17 +142,17 @@ deprecated("Migrate to using Sequence<T> and respective functions")
/**
* Returns a stream from the given collection
*/
public fun <T> Stream<T>.stream(): Stream<T> {
public fun <T> Stream<T>.asStream(): Stream<T> {
return this
}
/**
* Returns a sequence from the given collection
*/
public fun String.sequence(): Sequence<Char> {
public fun String.asSequence(): Sequence<Char> {
return object : Sequence<Char> {
override fun iterator(): Iterator<Char> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
}
@@ -160,9 +160,122 @@ public fun String.sequence(): Sequence<Char> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun <T> Array<out T>.sequence(): Sequence<T> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun BooleanArray.sequence(): Sequence<Boolean> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun ByteArray.sequence(): Sequence<Byte> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun CharArray.sequence(): Sequence<Char> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun DoubleArray.sequence(): Sequence<Double> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun FloatArray.sequence(): Sequence<Float> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun IntArray.sequence(): Sequence<Int> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun LongArray.sequence(): Sequence<Long> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun ShortArray.sequence(): Sequence<Short> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun <T> Iterable<T>.sequence(): Sequence<T> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun <K, V> Map<K, V>.sequence(): Sequence<Map.Entry<K, V>> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun <T> Sequence<T>.sequence(): Sequence<T> {
return this
}
/**
* Returns a stream from the given collection
*/
deprecated("Use asStream() instead")
public fun <T> Stream<T>.stream(): Stream<T> {
return this
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun String.sequence(): Sequence<Char> {
return asSequence()
}
/**
* Returns a sequence from the given collection
*/
deprecated("Use asSequence() instead")
public fun <T> Array<out T>.stream(): Stream<T> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<T> {
override fun iterator(): Iterator<T> {
return sequence.iterator()
@@ -173,9 +286,9 @@ public fun <T> Array<out T>.stream(): Stream<T> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun BooleanArray.stream(): Stream<Boolean> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Boolean> {
override fun iterator(): Iterator<Boolean> {
return sequence.iterator()
@@ -186,9 +299,9 @@ public fun BooleanArray.stream(): Stream<Boolean> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun ByteArray.stream(): Stream<Byte> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Byte> {
override fun iterator(): Iterator<Byte> {
return sequence.iterator()
@@ -199,9 +312,9 @@ public fun ByteArray.stream(): Stream<Byte> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun CharArray.stream(): Stream<Char> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Char> {
override fun iterator(): Iterator<Char> {
return sequence.iterator()
@@ -212,9 +325,9 @@ public fun CharArray.stream(): Stream<Char> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun DoubleArray.stream(): Stream<Double> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Double> {
override fun iterator(): Iterator<Double> {
return sequence.iterator()
@@ -225,9 +338,9 @@ public fun DoubleArray.stream(): Stream<Double> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun FloatArray.stream(): Stream<Float> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Float> {
override fun iterator(): Iterator<Float> {
return sequence.iterator()
@@ -238,9 +351,9 @@ public fun FloatArray.stream(): Stream<Float> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun IntArray.stream(): Stream<Int> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Int> {
override fun iterator(): Iterator<Int> {
return sequence.iterator()
@@ -251,9 +364,9 @@ public fun IntArray.stream(): Stream<Int> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun LongArray.stream(): Stream<Long> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Long> {
override fun iterator(): Iterator<Long> {
return sequence.iterator()
@@ -264,9 +377,9 @@ public fun LongArray.stream(): Stream<Long> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun ShortArray.stream(): Stream<Short> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Short> {
override fun iterator(): Iterator<Short> {
return sequence.iterator()
@@ -277,9 +390,9 @@ public fun ShortArray.stream(): Stream<Short> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun <T> Iterable<T>.stream(): Stream<T> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<T> {
override fun iterator(): Iterator<T> {
return sequence.iterator()
@@ -290,9 +403,9 @@ public fun <T> Iterable<T>.stream(): Stream<T> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun <K, V> Map<K, V>.stream(): Stream<Map.Entry<K, V>> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Map.Entry<K, V>> {
override fun iterator(): Iterator<Map.Entry<K, V>> {
return sequence.iterator()
@@ -303,9 +416,9 @@ public fun <K, V> Map<K, V>.stream(): Stream<Map.Entry<K, V>> {
/**
* Returns a sequence from the given collection
*/
deprecated("Use sequence() instead")
deprecated("Use asSequence() instead")
public fun String.stream(): Stream<Char> {
val sequence = sequence()
val sequence = asSequence()
return object : Stream<Char> {
override fun iterator(): Iterator<Char> {
return sequence.iterator()
@@ -33,17 +33,21 @@ public fun <T> streamOf(progression: Progression<T>): Stream<T> = object : Strea
/**
* Creates a sequence that returns all values from this iterator. The sequence is constrained to be iterated only once.
*/
public fun <T> Iterator<T>.sequence(): Sequence<T> {
public fun <T> Iterator<T>.asSequence(): Sequence<T> {
val iteratorSequence = object : Sequence<T> {
override fun iterator(): Iterator<T> = this@sequence
override fun iterator(): Iterator<T> = this@asSequence
}
return iteratorSequence.constrainOnce()
}
deprecated("Use asSequence() instead.")
public fun <T> Iterator<T>.sequence(): Sequence<T> = asSequence()
/**
* Creates a sequence that returns the specified values.
*/
public fun <T> sequenceOf(vararg elements: T): Sequence<T> = elements.sequence()
public fun <T> sequenceOf(vararg elements: T): Sequence<T> = elements.asSequence()
/**
* Creates a sequence that returns all values in the specified [progression].
@@ -376,8 +376,8 @@ class CollectionTest {
expect(2000000000000, { listOf(3000000000000, 2000000000000).min() })
expect('a', { listOf('a', 'b').min() })
expect("a", { listOf("a", "b").min() })
expect(null, { listOf<Int>().sequence().min<Int>() })
expect(2, { listOf(2, 3).sequence().min<Int>() })
expect(null, { listOf<Int>().asSequence().min<Int>() })
expect(2, { listOf(2, 3).asSequence().min<Int>() })
}
test fun max() {
@@ -387,8 +387,8 @@ class CollectionTest {
expect(3000000000000, { listOf(3000000000000, 2000000000000).max() })
expect('b', { listOf('a', 'b').max() })
expect("b", { listOf("a", "b").max() })
expect(null, { listOf<Int>().sequence().max<Int>() })
expect(3, { listOf(2, 3).sequence().max<Int>() })
expect(null, { listOf<Int>().asSequence().max<Int>() })
expect(3, { listOf(2, 3).asSequence().max<Int>() })
}
test fun minBy() {
@@ -397,8 +397,8 @@ class CollectionTest {
expect(3, { listOf(2, 3).minBy { -it } })
expect('a', { listOf('a', 'b').minBy { "x$it" } })
expect("b", { listOf("b", "abc").minBy { it.length() } })
expect(null, { listOf<Int>().sequence().minBy<Int, Int> { it } })
expect(3, { listOf(2, 3).sequence().minBy<Int, Int> { -it } })
expect(null, { listOf<Int>().asSequence().minBy<Int, Int> { it } })
expect(3, { listOf(2, 3).asSequence().minBy<Int, Int> { -it } })
}
test fun maxBy() {
@@ -407,8 +407,8 @@ class CollectionTest {
expect(2, { listOf(2, 3).maxBy { -it } })
expect('b', { listOf('a', 'b').maxBy { "x$it" } })
expect("abc", { listOf("b", "abc").maxBy { it.length() } })
expect(null, { listOf<Int>().sequence().maxBy<Int, Int> { it } })
expect(2, { listOf(2, 3).sequence().maxBy<Int, Int> { -it } })
expect(null, { listOf<Int>().asSequence().maxBy<Int, Int> { it } })
expect(2, { listOf(2, 3).asSequence().maxBy<Int, Int> { -it } })
}
test fun minByEvaluateOnce() {
@@ -416,7 +416,7 @@ class CollectionTest {
expect(1, { listOf(5, 4, 3, 2, 1).minBy { c++; it * it } })
assertEquals(5, c)
c = 0
expect(1, { listOf(5, 4, 3, 2, 1).sequence().minBy<Int, Int> { c++; it * it } })
expect(1, { listOf(5, 4, 3, 2, 1).asSequence().minBy<Int, Int> { c++; it * it } })
assertEquals(5, c)
}
@@ -425,7 +425,7 @@ class CollectionTest {
expect(5, { listOf(5, 4, 3, 2, 1).maxBy { c++; it * it } })
assertEquals(5, c)
c = 0
expect(5, { listOf(5, 4, 3, 2, 1).sequence().maxBy<Int, Int> { c++; it * it } })
expect(5, { listOf(5, 4, 3, 2, 1).asSequence().maxBy<Int, Int> { c++; it * it } })
assertEquals(5, c)
}
+1 -1
View File
@@ -68,7 +68,7 @@ class MapTest {
test fun stream() {
val map = mapOf("beverage" to "beer", "location" to "Mells", "name" to "James")
val named = map.sequence().filter { it.key == "name" }.single()
val named = map.asSequence().filter { it.key == "name" }.single()
assertEquals("James", named.value)
}
@@ -17,11 +17,11 @@ class MutableCollectionTest {
assertEquals(data, collection)
}
test fun fromStream() {
test fun fromSequence() {
val list = listOf("foo", "bar")
val collection = ArrayList<String>()
collection.addAll(list.sequence())
collection.addAll(list.asSequence())
assertEquals(list, collection)
}
@@ -6,7 +6,7 @@ import kotlin.test.assertEquals
class SequenceJVMTest {
test fun filterIsInstance() {
val src: Sequence<Any> = listOf(1, 2, 3.toDouble(), "abc", "cde").sequence()
val src: Sequence<Any> = listOf(1, 2, 3.toDouble(), "abc", "cde").asSequence()
val intValues: Sequence<Int> = src.filterIsInstance<Int>()
assertEquals(listOf(1, 2), intValues.toArrayList())
@@ -189,7 +189,7 @@ public class SequenceTest {
test fun sequenceFromIterator() {
val list = listOf(3, 2, 1, 0)
val iterator = list.iterator()
val sequence = iterator.sequence()
val sequence = iterator.asSequence()
assertEquals(list, sequence.toList())
fails {
sequence.toList()
@@ -233,7 +233,7 @@ public class SequenceTest {
'5' // fibonacci(10) = 55
)
assertEquals(expected, fibonacci().drop(4).flatMap { it.toString().sequence() }.take(10).toList())
assertEquals(expected, fibonacci().drop(4).flatMap { it.toString().asSequence() }.take(10).toList())
}
test fun flatMap() {
@@ -27,7 +27,7 @@ class IteratorsJVMTest {
}
test fun flatMapOnIterator() {
val result = sequenceOf(1, 2).flatMap { i -> (0..i).sequence()}
val result = sequenceOf(1, 2).flatMap { i -> (0..i).asSequence()}
assertEquals(listOf(0, 1, 0, 1, 2), result.toList())
}
}
@@ -39,7 +39,7 @@ class IteratorsTest {
}
test fun plus() {
val iter = arrayListOf("foo", "bar").sequence()
val iter = arrayListOf("foo", "bar").asSequence()
val iter2 = iter + "cheese"
assertEquals(arrayListOf("foo", "bar", "cheese"), iter2.toList())
@@ -52,12 +52,12 @@ class IteratorsTest {
test fun plusCollection() {
val a = arrayListOf("foo", "bar")
val b = arrayListOf("cheese", "wine")
val iter = a.sequence() + b.sequence()
val iter = a.asSequence() + b.asSequence()
assertEquals(arrayListOf("foo", "bar", "cheese", "wine"), iter.toList())
// lets use a mutable variable
var ml = arrayListOf("a").sequence()
ml += a.sequence()
var ml = arrayListOf("a").asSequence()
ml += a.asSequence()
ml += "beer"
ml += b
ml += "z"
@@ -65,11 +65,11 @@ class IteratorsTest {
}
test fun requireNoNulls() {
val iter = arrayListOf<String?>("foo", "bar").sequence()
val iter = arrayListOf<String?>("foo", "bar").asSequence()
val notNull = iter.requireNoNulls()
assertEquals(arrayListOf("foo", "bar"), notNull.toList())
val iterWithNulls = arrayListOf("foo", null, "bar").sequence()
val iterWithNulls = arrayListOf("foo", null, "bar").asSequence()
val notNull2 = iterWithNulls.requireNoNulls()
fails {
// should throw an exception as we have a null
@@ -8,12 +8,12 @@ fun sequences(): List<GenericFunction> {
templates add f("stream()") {
include(Maps)
exclude(Sequences)
deprecate { "Use sequence() instead" }
deprecate { "Use asSequence() instead" }
doc { "Returns a sequence from the given collection" }
returns("Stream<T>")
body {
"""
val sequence = sequence()
val sequence = asSequence()
return object : Stream<T> {
override fun iterator(): Iterator<T> {
return sequence.iterator()
@@ -25,6 +25,24 @@ fun sequences(): List<GenericFunction> {
}
templates add f("sequence()") {
include(Maps)
exclude(Sequences)
deprecate { "Use asSequence() instead" }
doc { "Returns a sequence from the given collection" }
returns("Sequence<T>")
body {
"""
return asSequence()
"""
}
body(Sequences) {
"""
return this
"""
}
}
templates add f("asSequence()") {
include(Maps)
exclude(Sequences)
doc { "Returns a sequence from the given collection" }
@@ -33,7 +51,7 @@ fun sequences(): List<GenericFunction> {
"""
return object : Sequence<T> {
override fun iterator(): Iterator<T> {
return this@sequence.iterator()
return this@asSequence.iterator()
}
}
"""
@@ -47,4 +65,5 @@ fun sequences(): List<GenericFunction> {
}
return templates
}
}