1. Обзор
Java 8 представила API Stream с функциональными операциями для обработки последовательностей. Если вы хотите узнать об этом больше, взгляните на эту статью.
В этой краткой статье мы рассмотрим, как преобразовать Строку в Поток из отдельных символов.
2. Преобразование С Использованием символов()
API String имеет новый метод – chars() – с помощью которого мы можем получить экземпляр S tream из объекта String . Этот простой API возвращает экземпляр Int Stream из ввода String .
Проще говоря, IntStream содержит целочисленное представление символов из объекта String :
String testString = "String"; IntStream intStream = testString.chars();
Можно работать с целочисленным представлением символов, не преобразуя их в эквивалент Character . Это может привести к некоторому незначительному повышению производительности, так как не будет необходимости помещать каждое целое число в объект Character .
Однако, если мы хотим отобразить символы для чтения, нам нужно преобразовать целые числа в удобную для человека форму Character :
StreamcharacterStream = testString.chars() .mapToObj(c -> (char) c);
3. Преобразование С Использованием Кодовых точек()
В качестве альтернативы мы можем использовать метод code Points() для получения экземпляра IntStream из строки . Преимущество использования этого API заключается в том, что дополнительные символы Юникода могут быть эффективно обработаны.
Дополнительные символы представлены суррогатными парами Юникода и будут объединены в одну кодовую точку. Таким образом, мы можем правильно обрабатывать (и отображать) любой символ Юникода:
IntStream intStream1 = testString.codePoints();
Нам нужно сопоставить возвращенный IntStream с Stream , чтобы отобразить его для пользователей:
StreamcharacterStream2 = testString.codePoints().mapToObj(c -> (char) c);
4. Преобразование в поток односимвольных строк
До сих пор нам удавалось получить Поток символов; что, если вместо этого нам нужен Поток одного символа строки s?
Как указано ранее в статье, мы будем использовать методы code Points() или charts() для получения экземпляра IntStream , который теперь можно сопоставить с Stream .
Процесс сопоставления включает в себя сначала преобразование целочисленных значений в их соответствующие символьные эквиваленты.
Тогда мы можем использовать String.valueOf() или Символ.toString() для преобразования символов в Строку объект:
StreamstringStream = testString.codePoints() .mapToObj(c -> String.valueOf((char) c));
5. Заключение
В этом кратком руководстве мы научимся получать поток Символов из объекта String , вызывая методы code Points() или chars () .
Это позволяет нам в полной мере использовать API Stream для удобного и эффективного управления символами.
Как всегда, фрагменты кода можно найти на GitHub .