Отображение итерируемой 1-к-n в kotlin - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь использовать Iterable.map, но вместо преобразования каждого значения в одно новое значение я хочу преобразовать одно значение в несколько новых значений.

Например:

val myList = listOf("test", "123", "another.test", "test2")
val result = myList.map {
    if(it.contains(".")) {
        return@map it.split(".")
    } else {
        return@map it
    }
}
//desired output: ["test", "123", "another", "test", "test2"]

Этот код приведет к созданию списка, который содержит как строки, так и списки строк (тип Any).

Как мне наиболее элегантно реализовать это?

1 Ответ

0 голосов
/ 02 марта 2019

Один быстрый способ сделать это - использовать flatMap.

val output = myList.flatMap { if(it.contains(".")) it.split(".") else listOf(it) }

Метод flatMap преобразует каждый элемент, используя данную функцию, а затем сводит результат в один список.

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/flat-map.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...