Ir al contenido

Caracteres en mayúsculas y minúsculas con un Stream

Uno de los ejemplos que pedisteis hace tiempo fue el de convertir los caracteres de una cadena a mayúsculas y minúsculas de forma secuencial. En este caso vamos a ver cómo manejar los caracteres en mayúsculas y minúsculas con un Stream. De esta forma podremos comparar cómo nos ayudan los Stream de Java 8 en vez de la programación imperativa normal del lenguaje Java.

Lo primero que haremos será convertir la cadena a un array de String. Ya que una de las cosas que vamos a ver más adelante es la complejidad de tratar las posiciones dentro de un Stream.

String[] s = cadena.split("");

Para conseguir tener un array de String nos hemos apoyado en el método .split().

Ahora que ya tenemos el array vamos a crear un Stream de enteros, es decir, un IntStream. Al final el IntStream es una secuencia de números. Esta secuencia la vamos a realizar desde el 0 hasta el tamaño de la cadena.

IntStream.range(0, s.length)

Ten en cuenta que ahora tenemos números en el Stream. Pero lo que nos interesa es manejar las cadenas de nuestro array de String, es por ello que tenemos que convertir ese número en una cadena apoyándonos en el método .mapToObj().

La idea del método .mapToObj() es que dado un número le devolvamos un objeto, en este caso un String.

.mapToObj(i -> i%2!=0 ? s[i].toUpperCase():s[i].toLowerCase())

Lo que hemos hecho en el Mapper es acceder a la posición del array con el entero y devolver su contenido. Pero hemos aprovechado para devolverlo en mayúsculas o en minúsculas atendiendo a su posición.

Así que en este punto ya tenemos nuestros caracteres en mayúsculas o en minúsculas. Ahora en la operación final podemos hacer dos cosas. O volcarlo por pantalla mediante un .forEach().

IntStream.range(0, s.length)
.mapToObj(i -> i%2!=0 ? s[i].toUpperCase():s[i].toLowerCase())
.forEach(System.out::println);

O bien unirlos mediante una acumulación, la clase Collector. Para crear el Collector utilizamos el método .collect() y el tipo de acumulación que vamos a hacer es la acumulación de contenido, así que nos apoyaremos en el método .joining().

String cadena = IntStream.range(0, s.length)
.mapToObj(i -> i%2!=0 ? s[i].toUpperCase():s[i].toLowerCase())
.collect(Collectors.joining());

Ya tendremos nuestra cadena con la secuencia de caracteres en mayúsculas y minúsculas de forma alterna. Ahora ya puedes ver lo sencillo que es manejar caracteres en mayúsculas y minúsculas con un Stream y comparar con la versión imperativa del lenguaje.

Foto de Víctor Cuervo

Víctor Cuervo

Programador, Arquitecto IT, álter ego de Línea de Código, amante de las tecnologías, generador de conocimiento y facilitador del aprendizaje.

Descarga el código de Caracteres en mayúsculas y minúsculas con un Stream

El artículo explica cómo manejar caracteres en mayúsculas y minúsculas con un Stream en Java de manera alterna.

Descargar código