Capítulo 13. De flujos a iterables y a secuencias
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Tanto Java como Kotlin nos permiten transformar y reducir colecciones. Sin embargo, tienen objetivos de diseño e implementaciones diferentes. ¿Qué utiliza Kotlin en lugar de los flujos de Java, cuándo debemos convertir y cómo?
Flujos Java
Java 8 introdujo los flujos en 2014, haciendo un buen uso de las nuevas lambdas. Supongamos que queremos calcular la longitud media de algunas cadenas, con la salvedad de que las cadenas en blanco (las que sólo tienen caracteres de espacio en blanco) deben tratarse como si estuvieran vacías. Antes podríamos haber escrito:
publicstaticdoubleaverageNonBlankLength(List<String>strings){varsum=0;for(vars:strings){if(!s.isBlank())sum+=s.length();}returnsum/(double)strings.size();}
Con flujos Java, podemos expresar este algoritmo como filter, map, y reduce convirtiendo primero el List en un Stream y aplicando transformaciones:
publicstaticdoubleaverageNonBlankLength(List<String>strings){returnstrings.stream().filter(s->!s.isBlank()).mapToInt(String::length).sum()/(double)strings.size();}
En lugar de tener que ejecutar el bucle for en nuestra cabeza para ver lo que hace este código, podemos ver los pasos del algoritmo declarados línea por línea y confiar en que el tiempo de ejecución implemente esos pasos por nosotros.
Si tenemos mucha prisa ...