Artículos
Java

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

24/Mar/2016

Uno de los ejemplo 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 como manejar los caracteres en mayúsculas y minúsculas con un Stream. De esta forma podremos comparar como 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 = "Esto es una frase muy interesante".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.

String 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.

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

Lo que hemos 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 suposició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::print);

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.

Código Fuente

Descárgate el código fuente de Caracteres en mayúsculas y minúsculas con un Stream
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
Suscribir
Notificar de
guest
0 Comentarios
Opiniones integradas
Ver todos los comentarios