web-dev-qa-db-fra.com

Comment convertir une chaîne en un Java 8 flux de caractères?

J'ai trouvé cette question sur l'obtention d'un Java.util.streams.IntStream à partir d'une chaîne Java mais je n'ai pas trouvé cette méthode maintenant que j'utilise Java 8.

Correction: Comme vous l'avez souligné, j'utilisais Java 7. Maintenant, la méthode chars() est là. Mais la question s'applique toujours:

Comment obtenir un Stream<Character> d'une chaîne?

19
ElderMael

J'allais vous indiquer ma réponse précédente sur ce sujet mais il s'avère que vous avez déjà lié à cette question . autre réponse fournit également des informations utiles.

Si vous voulez des valeurs char, vous pouvez utiliser les IntStream renvoyées par String.chars() et convertir les valeurs int en char sans perte de information. Les autres réponses expliquent pourquoi il n'y a pas de spécialisation primitive CharStream pour la classe Stream.

Si vous voulez vraiment des objets Character encadrés, utilisez mapToObj() pour convertir de IntStream en un flux de type référence. Dans mapToObj(), transtypez la valeur int en char. Puisqu'un objet est attendu comme valeur de retour ici, le char sera mis en boîte automatique dans un Character. Cela se traduit par Stream<Character>. Par exemple,

Stream<Character> sch = "abc".chars().mapToObj(i -> (char)i);
sch.forEach(ch -> System.out.printf("%c %s%n", ch, ch.getClass().getName()));

a Java.lang.Character
b Java.lang.Character
c Java.lang.Character
36
Stuart Marks

Veuillez vous assurer que vous utilisez JDK 8. Cette méthode située dans l'interface CharSequence, implémentée par String.

Cet extrait fonctionne bien:

import Java.util.stream.IntStream;

public class CharsSample {

    public static void main(String[] args) {
        String s =  "123";
        IntStream chars = s.chars();
    }
}
3
dds