diff --git a/libraries/stdlib/src/kotlin/StringsJVM.kt b/libraries/stdlib/src/kotlin/StringsJVM.kt index 471a7ec1772..7ccd4eea976 100644 --- a/libraries/stdlib/src/kotlin/StringsJVM.kt +++ b/libraries/stdlib/src/kotlin/StringsJVM.kt @@ -332,6 +332,22 @@ public inline fun String.partition(predicate: (Char) -> Boolean): Pair String.map(transform: (Char) -> R): List = mapTo(ArrayList(), transform) + +/** + * Transforms each character of this string with the given *transform* function and + * adds each return value to the given *result* collection + * + */ +public inline fun > String.mapTo(result: C, transform: (Char) -> R): C { + for (c in this) result.add(transform(c)) + return result +} + /** * Returns the result of transforming each character to one or more values which are concatenated together into a single list * diff --git a/libraries/stdlib/test/StringJVMTest.kt b/libraries/stdlib/test/StringJVMTest.kt index bc6c9e474b1..b4ba58b3103 100644 --- a/libraries/stdlib/test/StringJVMTest.kt +++ b/libraries/stdlib/test/StringJVMTest.kt @@ -142,6 +142,38 @@ class StringJVMTest { assertEquals("abc", pair.second, "pair.second") } + test fun map() { + assertEquals(arrayListOf('a', 'b', 'c'), "abc".map({ it })) + + assertEquals(arrayListOf(true, false, true), "AbC".map({ it.isUpperCase() })) + + assertEquals(arrayListOf(), "".map({ it.isUpperCase() })) + + assertEquals(arrayListOf(97, 98, 99), "abc".map({ it.toInt() })) + } + + test fun mapTo() { + val result1 = arrayListOf() + val return1 = "abc".mapTo(result1, { it }) + assertEquals(result1, return1) + assertEquals(arrayListOf('a', 'b', 'c'), result1) + + val result2 = arrayListOf() + val return2 = "AbC".mapTo(result2, { it.isUpperCase() }) + assertEquals(result2, return2) + assertEquals(arrayListOf(true, false, true), result2) + + val result3 = arrayListOf() + val return3 = "".mapTo(result3, { it.isUpperCase() }) + assertEquals(result3, return3) + assertEquals(arrayListOf(), result3) + + val result4 = arrayListOf() + val return4 = "abc".mapTo(result4, { it.toInt() }) + assertEquals(result4, return4) + assertEquals(arrayListOf(97, 98, 99), result4) + } + test fun flatMap() { val data = "abcd" val result = data.flatMap { listOf(it) }