Convertendo String em Stream de caracteres

Convertendo String em Stream de caracteres

1. Visão geral

Java 8 introduziu a APIStream, com operações semelhantes a funcionais para sequências de processamento. Se você quiser ler mais sobre isso,have a look at this article.

Neste artigo rápido, veremos como converterString emStream de caracteres únicos.

2. Conversão usandochars()

A APIString tem um novo método -chars() - com o qual podemos obter uma instância deStream de um objetoString. Esta API simples retorna uma instância deIntStream da entradaString.

Simplificando,IntStream contém uma representação inteira dos caracteres do objetoString:

String testString = "String";
IntStream intStream = testString.chars();

É possível trabalhar com a representação inteira dos caracteres sem convertê-los em seu equivalenteCharacter. Isso pode levar a alguns ganhos menores de desempenho, pois não haverá necessidade de encaixar cada número inteiro em um objetoCharacter.

No entanto, se quisermos exibir os caracteres para leitura, precisamos converter os inteiros para o formatoCharacter amigável para humanos:

Stream characterStream = testString.chars()
  .mapToObj(c -> (char) c);

3. Conversão usandocodePoints()

Como alternativa, podemos usar o métodocodePoints() para obter uma instância deIntStream de umString.. A vantagem de usar esta API é que os caracteres suplementares Unicode podem ser tratados com eficácia.

Caracteres suplementares são representados por pares substitutos Unicode e serão mesclados em um único ponto de código. Dessa forma, podemos processar (e exibir) corretamente qualquer símbolo Unicode:

IntStream intStream1 = testString.codePoints();

Precisamos mapear oIntStream retornado paraStream<Character> para exibi-lo aos usuários:

Stream characterStream2
  = testString.codePoints().mapToObj(c -> (char) c);

4. Conversão para aStream de caractere únicoStrings

Até agora, conseguimos obterStream de caracteres; e se quisermos umStream de caractere únicoStrings em vez disso?

Assim como especificado anteriormente no artigo, usaremos os métodoscodePoints() ouchars() para obter uma instância deIntStream que agora podemos mapear paraStream<String>.

O processo de mapeamento envolve a conversão dos valores inteiros para seus respectivos equivalentes de caracteres primeiro.

Então, podemos usarString.valueOf() ouCharacter.toString() para converter os caracteres em um objetoString:

Stream stringStream = testString.codePoints()
  .mapToObj(c -> String.valueOf((char) c));

5. Conclusão

Neste tutorial rápido, aprendemos a obter um fluxo deCharacter de um objetoString chamando os métodoscodePoints() ouchars().

Isso nos permite aproveitar ao máximo a APIStream - para manipular caracteres de maneira conveniente e eficaz.

Como sempre, trechos de código podem ser encontradosover on GitHub.