Konvertiert einen String in einen java.util.StreamCharacter

8

Manchmal möchte ich etwas Einfaches mit jedem Zeichen in einer Zeichenkette machen. Da eine Zeichenkette unveränderlich ist, gibt es leider keine gute Möglichkeit dies zu tun, außer das Durchlaufen der Zeichenkette, die ziemlich ausführlich sein kann. Wenn Sie stattdessen einen Stream verwenden würden, könnte es viel kürzer sein, in nur ein oder zwei Zeilen.

Gibt es eine Möglichkeit, ein String in ein Stream<Character> zu konvertieren?

    
Loovjo 09.09.2015, 05:49
quelle

3 Antworten

7

Sie können die Methode chars() verwenden, die in CharSequence bereitgestellt wird, und da String class diese Schnittstelle implementiert, können Sie darauf zugreifen. Die Methode chars() gibt IntStream zurück, also müssen Sie sie in (char) umwandeln, wenn Sie IntStream in Stream<Character>

konvertieren möchten

z. B.

%Vor%     
sol4me 09.09.2015, 06:00
quelle
5

Es ist normalerweise sicherer, einen Stream von Codepunkten zu verwenden, der IntStream :

ist %Vor%

Auf diese Weise werden Unicode-Ersatzpaare zu einem einzigen Codepunkt zusammengeführt, sodass Sie mit allen Unicode-Symbolen korrekte Ergebnisse erhalten. Beispielverwendung:

%Vor%

Beachten Sie auch, dass Sie das Boxen vermeiden, daher ist es möglicherweise effektiver als die Verarbeitung von Stream<Character> .

Eine andere Möglichkeit, einen solchen Stream zu sammeln, ist die separate Verwendung von StringBuilder :

%Vor%

Obwohl ein solcher Ansatz weniger funktional aussieht, ist es möglicherweise effizienter, wenn Sie bereits ein StringBuilder haben oder später etwas mehr zu demselben String verketten möchten.

    
Tagir Valeev 09.09.2015 06:56
quelle
1

Sie können chars method verwenden, das IntStream zurückgibt, und indem Sie es auf char mappen, erhalten Sie Stream<Character> . mapToObj gibt Object valued Stream in unserem Fall Stream von Character zurück, weil wir int auf char und java Auto Boxed auf Character zugeordnet haben intern .

%Vor%

Außerdem kann man es mit Hilfe von Guava ( com.google.common.collect.Lists ) so verwenden, die eine unveränderliche Liste von Character von String zurückgibt.

%Vor%     
coder-croc 09.09.2015 05:59
quelle

Tags und Links