Как преобразовать строку в поток символов Java 8?

Я нашел этот вопрос о получении java.util.streams.IntStream из строки java, но я не нашел этот метод сейчас, когда я использую Java 8.

Коррекция: как вы, ребята, указали, я использовал Java 7. Теперь существует метод chars(). Но вопрос все еще применяется:

Как я могу получить Stream<Character> из строки?

Ответы

Ответ 1

Я собирался указать вам мой более ранний ответ на эту тему, но, оказывается, вы уже связались с этот вопрос. другой ответ также содержит полезную информацию.

Если вы хотите значения char, вы можете использовать IntStream, возвращенный String.chars(), и отличить значения int до char без потери информации. В других ответах объясняется, почему нет CharStream примитивной специализации для класса Stream.

Если вам действительно нужны объекты в коробке Character, используйте mapToObj() для преобразования из IntStream в поток ссылочного типа. В mapToObj() введите значение int в значение char. Поскольку объект ожидается как возвращаемое значение здесь, char будет автобоксирован в Character. Это приводит к Stream<Character>. Например,

Stream<Character> sch = "abc".chars().mapToObj(i -> (char)i);
sch.forEach(ch -> System.out.printf("%c %s%n", ch, ch.getClass().getName()));

a java.lang.Character
b java.lang.Character
c java.lang.Character

Ответ 2

Пожалуйста, убедитесь, что вы используете JDK 8. Этот метод находится в интерфейсе CharSequence, реализованном в String.

Этот фрагмент отлично работает:

import java.util.stream.IntStream;

public class CharsSample {

    public static void main(String[] args) {
        String s =  "123";
        IntStream chars = s.chars();
    }
}