Kotlin 2.4
Ejercicios de Kotlin sobre Colecciones
7 ejercicios de Colecciones en Kotlin. Piensa la respuesta antes de abrirla: la explicación dice por qué las demás opciones fallan.
1 · Elige la respuesta · nivel 1
¿Qué pasa con este código?
val nums = listOf(1, 2, 3)nums.add(4)- ANo compila: List no tiene add
- BAñade el 4 al final
- CLanza UnsupportedOperationException
- DCrea una lista nueva con el 4
Ver la respuesta
Respuesta: A. No compila: List no tiene add
listOf devuelve una List de solo lectura y esa interfaz no tiene add. Para añadir, usa mutableListOf, o crea una lista nueva con nums + 4.
2 · Elige la respuesta · nivel 1
¿Qué imprime este código?
fun main() { val pets = listOf("gato", "perro", "loro") println(pets[2])}- Aloro
- Bperro
- Cgato
- DError
Ver la respuesta
Respuesta: A. loro
Los índices empiezan en 0: pets[0] es gato, pets[1] perro y pets[2] loro.
3 · Elige la respuesta · nivel 1
¿Qué imprime este código?
fun main() { val numbers = listOf(4, 8, 15) println(numbers.size)}- A3
- B2
- C15
- D27
Ver la respuesta
Respuesta: A. 3
size dice cuántos elementos hay en la lista, no cuánto suman.
4 · Elige la respuesta · nivel 2
¿Qué imprime este código?
val names = listOf("ana", null, "eva")println(names.mapNotNull { it?.uppercase() })- A[ANA, EVA]
- B[ANA, null, EVA]
- C[ANA, NULL, EVA]
- DNullPointerException
Ver la respuesta
Respuesta: A. [ANA, EVA]
mapNotNull aplica la transformación y descarta los resultados null. it?.uppercase() devuelve null para el elemento null, así que desaparece.
5 · Elige la respuesta · nivel 2
¿Qué imprime este código?
val words = listOf("sol", "mar", "sol", "luz")println(words.groupingBy { it }.eachCount())- A{sol=2, mar=1, luz=1}
- B[sol=2, mar=1, luz=1]
- C{mar=1, luz=1, sol=2}
- D{sol=[sol, sol], mar=[mar], luz=[luz]}
Ver la respuesta
Respuesta: A. {sol=2, mar=1, luz=1}
groupingBy crea una agrupación perezosa y eachCount cuenta los elementos de cada clave. El mapa resultante conserva el orden de primera aparición. groupBy, en cambio, guardaría las listas.
6 · Completa el hueco · nivel 2
Completa para quedarte con los pares del 1 al 10 y elevarlos al cuadrado.
val evens = (1..10).___ { it % 2 == 0 }.___ { it * it }- filter
- map
- forEach
- reduce
- also
- takeIf
Ver la respuesta
Respuesta: filter · map
val evens = (1..10).filter { it % 2 == 0 }.map { it * it }filter conserva los elementos que cumplen la condición y map transforma cada uno. El resultado es [4, 16, 36, 64, 100].
7 · Completa el hueco · nivel 2
Completa para obtener los títulos de las 2 canciones más escuchadas.
data class Song(val title: String, val plays: Int)val songs = listOf(Song("A", 10), Song("B", 50), Song("C", 30))println(songs.___ { it.plays }.___(2).map { it.title })- sortedByDescending
- take
- sortedBy
- first
- limit
- orderBy
Ver la respuesta
Respuesta: sortedByDescending · take
data class Song(val title: String, val plays: Int)val songs = listOf(Song("A", 10), Song("B", 50), Song("C", 30))println(songs.sortedByDescending { it.plays }.take(2).map { it.title })sortedByDescending ordena por la clave de mayor a menor y take(n) se queda con los n primeros. limit es el nombre en los streams de Java.