Отбор и преобразование в Kotlin
На последовательности filter и map
работают так же по смыслу, как на списке: сначала
отсекают лишние элементы, затем меняют каждый
оставшийся. Разница в том, что оба шага остаются
записью до конечного действия.
Из списка оценок можно оставить проходные баллы и перевести их в буквенные метки:
fun main() {
val scores = listOf(42, 88, 55, 91, 60)
val labels = scores.asSequence()
.filter { it >= 60 }
.map { score ->
when {
score >= 90 -> "A"
score >= 75 -> "B"
else -> "C"
}
}
.toList()
println(labels)
}
Тот же прием подходит для строк: отбор по длине и приведение к верхнему регистру в одной цепочке:
fun main() {
val tags = listOf("io", "api", "log", "ui")
val shortUpper = tags.asSequence()
.filter { it.length <= 3 }
.map { it.uppercase() }
.toList()
println(shortUpper)
}
Дан список listOf(-2, 0, 5, 8, 11).
Оставьте положительные числа, умножьте каждое
на два и выведите список результата.
Даны строки listOf("go", "kotlin", "rust").
Отберите слова длиннее двух символов, возьмите
первые три буквы каждого и выведите список
полученных коротких фрагментов.