stdlib: add flatten()
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
package kotlin
|
||||
|
||||
import java.util.ArrayList
|
||||
import kotlin.platform.platformName
|
||||
|
||||
/**
|
||||
* Returns a single list of all elements from all collections in original collection
|
||||
*/
|
||||
public fun <T> Iterable<Iterable<T>>.flatten(): List<T> {
|
||||
val result = ArrayList<T>()
|
||||
for (element in this) {
|
||||
result.addAll(element)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a stream of all elements from all streams in original stream
|
||||
*/
|
||||
public fun <T> Stream<Stream<T>>.flatten(): Stream<T> {
|
||||
return FlatteningStream(this, { it })
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a single list of all elements from all collections in original collection
|
||||
*/
|
||||
public fun <T> Array<Array<out T>>.flatten(): List<T> {
|
||||
val result = ArrayList<T>(sumBy { it.size() })
|
||||
for (element in this) {
|
||||
result.addAll(element)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -164,6 +164,11 @@ abstract class IterableTests<T : Iterable<String>>(val data: T, val empty: T) {
|
||||
assertEquals(listOf(3, 3), lengths)
|
||||
}
|
||||
|
||||
Test
|
||||
fun flatten() {
|
||||
assertEquals(listOf(0, 1, 2, 3, 0, 1, 2, 3), data.map { 0..it.length() }.flatten())
|
||||
}
|
||||
|
||||
Test
|
||||
fun mapIndexed() {
|
||||
val shortened = data.mapIndexed {(index, value) -> value.substring(0..index) }
|
||||
|
||||
@@ -213,6 +213,13 @@ public class StreamTest {
|
||||
assertEquals(listOf(0, 1, 3, 4), result.toList())
|
||||
}
|
||||
|
||||
test
|
||||
fun flatten() {
|
||||
val data = streamOf(1, 2).map { streamOf(0..it) }
|
||||
assertEquals(listOf(0, 1, 0, 1, 2), data.flatten().toList())
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
test fun pairIterator() {
|
||||
val pairStr = (fibonacci() zip fibonacci().map { i -> i*2 }).joinToString(limit = 10)
|
||||
|
||||
Reference in New Issue
Block a user