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

24/Mar/2016 Java , , Deja un comentario

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.

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

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

  1. String cadena = IntStream.range(0, s.length)
  2. .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().

  1. IntStream.range(0, s.length)
  2. .mapToObj(i -> i%2!=0 ? s[i].toUpperCase():s[i].toLowerCase())
  3. .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()

  1. String cadena = IntStream.range(0, s.length)
  2. .mapToObj(i -> i%2!=0 ? s[i].toUpperCase():s[i].toLowerCase())
  3. .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.

Vídeos sobre Java


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*