From 4167359c084b5af684c36b4112f74841db4dfdcf Mon Sep 17 00:00:00 2001 From: Ilya Ryzhenkov Date: Mon, 9 Jun 2014 23:24:45 +0400 Subject: [PATCH] Map.filter() returns Map instead of List of Entries --- libraries/stdlib/src/generated/_Filtering.kt | 12 +++++++++--- .../kotlin-stdlib-gen/src/templates/Filtering.kt | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/libraries/stdlib/src/generated/_Filtering.kt b/libraries/stdlib/src/generated/_Filtering.kt index f6e08fa2531..fdc46e28a27 100644 --- a/libraries/stdlib/src/generated/_Filtering.kt +++ b/libraries/stdlib/src/generated/_Filtering.kt @@ -432,10 +432,16 @@ public inline fun Iterable.filter(predicate: (T) -> Boolean): List { } /** - * Returns a list containing all elements matching the given *predicate* + * Returns a map containing all key-value pairs matching the given *predicate* */ -public inline fun Map.filter(predicate: (Map.Entry) -> Boolean): List> { - return filterTo(ArrayList>(), predicate) +public inline fun Map.filter(predicate: (Map.Entry) -> Boolean): Map { + val result = HashMap() + for (entry in this) { + if (predicate(entry)) { + result.put(entry.key, entry.value) + } + } + return result } /** diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt index 5a17166734d..9547e89cb00 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt @@ -205,7 +205,21 @@ fun filtering(): List { return FilteringStream(this, true, predicate) """ } + include(Maps) + doc(Maps) { "Returns a map containing all key-value pairs matching the given *predicate*" } + returns(Maps) { "Map" } + body(Maps) { + """ + val result = HashMap() + for (entry in this) { + if (predicate(entry)) { + result.put(entry.key, entry.value) + } + } + return result + """ + } } templates add f("filterTo(destination: C, predicate: (T) -> Boolean)") {