Función Kotlin flatMap()

David Mbochi Njonge 20 junio 2023
  1. Error común al usar la función map() en Kotlin
  2. Función flatMap() de Kotlin
  3. una alternativa de la función flatMap() en Kotlin
  4. Conclusión
Función Kotlin flatMap()

Cuando desarrollamos aplicaciones, siempre usamos el marco de colecciones en todas las aplicaciones. Si tienes alguna lista, has interactuado con colecciones.

Usamos colecciones para almacenar datos relacionados temporalmente en la memoria para ejecutar diferentes cálculos en los datos. Por ejemplo, las colecciones nos ayudan a encontrar el tamaño de los datos de la base de datos o un archivo.

Estos cálculos eran bastante difíciles de implementar antes de que se introdujeran los flujos en Java 8 porque los desarrolladores usaban un enfoque de programación imperativo.

La API stream hizo que los cálculos con las colecciones fueran bastante fáciles de implementar porque el código utiliza un enfoque de programación declarativo.

En Kotlin, también podemos usar este enfoque de programación con los mismos métodos que se usan en la API stream, como filter(), map(), flatMap(), y otros.

En este tutorial, aprenderemos cómo funciona la función flatMap() en Kotlin y la diferencia entre las funciones flatMap() y map().

Error común al usar la función map() en Kotlin

Al usar la función mapa(), puede decidir obtener una sola lista después de operar en dos listas, pero la función no devuelve una sola lista.

Este es un problema común usando el método map(). La siguiente sección muestra cómo ocurre el problema.

Abra el entorno de desarrollo IntelliJ y seleccione Archivo > Nuevo > Proyecto. Ingrese el nombre del proyecto como kotlin-flatmap, seleccione Kotlin en la sección Idioma e Intellij en la sección Build system.

Cree un archivo Main.kt en la carpeta kotlin y copie y pegue el siguiente código en el archivo.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<List<String>> {
    return stringArray.map { word -> word.split("") }
        .distinct()
        .toList();
}

fun main(){
    println(getUniqueCharacters());
}

Nuestro objetivo para todos los ejemplos que cubriremos en este tutorial es devolver una sola lista que contenga distintos caracteres de una matriz con dos cadenas, como se muestra arriba.

Si lo notó, el método getUniqueCharacters() devuelve una lista de listas List<List<String>> que es el tipo de retorno de la función map().

La función map() devuelve una lista que contiene dos listas distintas, lo que va en contra de nuestro objetivo. Ejecute el código para verificar que la función map() devuelve dos listas distintas, como se muestra a continuación.

[[, H, a, r, r, y, ], [, p, o, t, t, e, r, ]]

Función flatMap() de Kotlin

Comente el ejemplo anterior y copie y pegue el siguiente código en el archivo Main.kt después de él.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<String> {
    return stringArray.map { word -> word.split("") }
        .flatMap { it }
        .distinct()
        .toList();
}

fun main(){
    println(getUniqueCharacters())
}

La función getUniqueCharacters() devuelve una lista que contiene una cadena que es el tipo de retorno de la función flatMap().

El flatMap() devuelve una sola lista que contiene elementos únicos al transformar la matriz utilizando el método split() en caracteres individuales. El método distinct() asegura que la lista devuelta contenga caracteres únicos.

Ejecute el código anterior para verificar una sola lista que contenga resultados de caracteres únicos.

[, H, a, r, y, p, o, t, e]

una alternativa de la función flatMap() en Kotlin

Comente el ejemplo anterior y copie y pegue el siguiente código en el archivo Main.kt después de él.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<String> {
    return stringArray.map { word -> word.split("") }
        .flatten()
        .distinct()
        .toList()
}

fun main(){
    println(getUniqueCharacters())
}

En este ejemplo, hemos utilizado la función flatten() que es similar a la función flatMap(). La función flatten() devuelve una sola lista agregando todos los elementos de colecciones existentes en una lista.

Ejecute este ejemplo para verificar que devuelve una sola lista que contiene todos los caracteres únicos de nuestra matriz.

[, H, a, r, y, p, o, t, e]

Conclusión

En este tutorial, hemos aprendido cómo funciona la función flatMap() cuando desea devolver una sola lista de varias colecciones. También hemos aprendido el inconveniente de utilizar el método map() para lograr el mismo objetivo.

Si desea leer más sobre cómo funcionan otras funciones en Kotlin, visite esta documentación de Kotlin que cubre las funciones en detalle.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Artículo relacionado - Kotlin Function