Konwersja ciągu znaków na strumień znaków

1. Przegląd

Java 8 wprowadziła Stream API z funkcjonalnymi operacjami przetwarzania sekwencji. Jeśli chcesz poczytać o tym więcej, zajrzyj do tego artykułu.

W tym krótkim artykule zobaczymy, jak przekonwertować ciąg znaków na strumień pojedynczych znaków.

2. Konwersja za pomocą znaków ()

Ciąg API jest nowy sposób - znaki (), - za pomocą którego można uzyskać wystąpienie S TREAM z łańcuchach obiektu. To proste API zwraca instancję Int Stream od wejścia String .

Mówiąc najprościej, IntStream zawiera całkowitą reprezentację znaków z obiektu String :

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

Można pracować z liczbową reprezentacją znaków bez konwertowania ich na ich odpowiedniki typu Character . Może to prowadzić do niewielkiego wzrostu wydajności, ponieważ nie będzie potrzeby umieszczania każdej liczby całkowitej w obiekcie typu Character .

Jeśli jednak mamy wyświetlać znaki do czytania, musimy przekonwertować liczby całkowite na przyjazną dla człowieka postać znakową:

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

3. Konwersja za pomocą codePoints ()

Alternatywnie możemy użyć metody codePoints () , aby pobrać wystąpienie IntStream z obiektu String. Zaletą korzystania z tego interfejsu API jest to, że można efektywnie obsługiwać dodatkowe znaki Unicode.

Znaki dodatkowe są reprezentowane przez pary zastępcze Unicode i zostaną scalone w jeden punkt kodowy. W ten sposób możemy poprawnie przetworzyć (i wyświetlić) dowolny symbol Unicode:

IntStream intStream1 = testString.codePoints();

Musimy zmapować zwrócony IntStream do Stream, aby wyświetlić go użytkownikom:

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

4. Konwersja na strumień pojedynczych ciągów znaków

Do tej pory byliśmy w stanie uzyskać strumień postaci; Co zrobić, jeśli chcemy Stream z pojedynczym znakiem String s zamiast?

Jak określono wcześniej w artykule, użyjemy metody codePoints () lub chars () , aby uzyskać instancję IntStream , którą możemy teraz odwzorować na Stream .

Proces mapowania obejmuje najpierw konwersję wartości całkowitych na odpowiadające im odpowiedniki znaków.

Następnie możemy użyć String.valueOf () lub Character.toString (), aby przekonwertować znaki na obiekt String :

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

5. Wniosek

W tym krótkim samouczku nauczymy się uzyskiwać strumień znaków Character z obiektu String , wywołując metody codePoints () lub chars () .

To pozwala nam w pełni wykorzystać Stream API - wygodnie i efektywnie manipulować postaciami.

Jak zawsze, fragmenty kodu można znaleźć na GitHub.