2014-10-12 12 views

risposta

31

mi stava per puntare a my earlier answer su questo argomento, ma si scopre che hai già collegato a that question. Lo other answer fornisce anche informazioni utili.

Se volete char valori, è possibile utilizzare il IntStream restituito da String.chars() e gettato i valori int per char senza perdita di informazioni. Le altre risposte hanno spiegato il motivo per cui non esiste una specializzazione primitiva CharStream per la classe Stream.

Se si desidera realmente oggetti boxed Character, utilizzare mapToObj() per convertire da IntStream a un flusso di tipo di riferimento. Entro mapToObj(), inserire il valore int in char. Poiché un oggetto è previsto come valore di ritorno, lo char verrà inserito automaticamente in un Character. Ciò risulta in Stream<Character>. Ad esempio,

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 
2

Assicurarsi di utilizzare JDK 8. Questo metodo si trova nell'interfaccia CharSequence, implementata da String.

Questo frammento di codice funziona benissimo:

import java.util.stream.IntStream; 

public class CharsSample { 

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

Il metodo chars() è nella classe base CharSequence! – isnot2bad

+0

Sì, ho gradle usare Java 7. Ma come posso ottenere uno Stream da una stringa? – ElderMael

+0

@ElderMael Stai usando Java 7 o Java 8? Questi metodi e tipi sono nuovi in ​​Java 8. –

Problemi correlati