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?
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
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();
}
}