Преобразование строки в поток символов
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.