Преобразование строки в поток символов

Преобразование строки в поток символов

1. обзор

В Java 8 появился APIStream с функционально-подобными операциями для обработки последовательностей. Если вы хотите узнать об этом больше,have a look at this article.

В этой быстрой статье мы увидим, как преобразоватьString вStream отдельных символов.

2. Преобразование с использованиемchars()

В APIString есть новый метод -chars(), с помощью которого мы можем получить экземплярStream из объектаString. Этот простой API возвращает экземплярIntStream из вводаString.

Проще говоря,IntStream содержит целочисленное представление символов из объектаString:

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

Можно работать с целочисленным представлением символов без преобразования их в эквивалентCharacter. Это может привести к небольшому увеличению производительности, поскольку не нужно будет помещать каждое целое число в объектCharacter.

Однако, если мы хотим отображать символы для чтения, нам нужно преобразовать целые числа в удобную для человека формуCharacter:

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

3. Преобразование с использованиемcodePoints()

В качестве альтернативы мы можем использовать методcodePoints(), чтобы получить экземплярIntStream изString.. Преимущество использования этого API состоит в том, что можно эффективно обрабатывать дополнительные символы Unicode.

Дополнительные символы представлены суррогатными парами Unicode и будут объединены в одну кодовую точку. Таким образом, мы можем правильно обработать (и отобразить) любой символ Unicode:

IntStream intStream1 = testString.codePoints();

Нам нужно сопоставить возвращенныйIntStream сStream<Character>, чтобы отобразить его пользователям:

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

4. Преобразование вStream одного символаStrings

На данный момент нам удалось получитьStream символов; что, если вместо этого мы хотим использоватьStream из одного символаStrings?

Как указано ранее в статье, мы воспользуемся методамиcodePoints() илиchars(), чтобы получить экземплярIntStream, который теперь можно сопоставить сStream<String>.

Процесс отображения включает в себя сначала преобразование целочисленных значений в соответствующие им символьные эквиваленты.

Затем мы можем использоватьString.valueOf() илиCharacter.toString() для преобразования символов в объектString:

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

5. Заключение

В этом кратком руководстве мы научимся получать потокCharacter из объектаString путем вызова методовcodePoints() илиchars().

Это позволяет нам в полной мере использовать APIStream - для удобного и эффективного управления символами.

Как всегда, фрагменты кода можно найтиover on GitHub.