如何将字符串转换为Java 8字符流?

时间:2014-10-12 01:19:49

标签: java java-8 java-stream

我发现this question关于从java String中获取java.util.streams.IntStream但是我现在还没有找到这个方法,因为我正在使用Java 8。

更正:正如你们所指出的,我使用的是Java 7.现在方法chars()就在那里。但问题仍然存在:

如何从字符串中获取Stream<Character>

3 个答案:

答案 0 :(得分:35)

我打算在此问题上指向my earlier answer,但事实证明您已经与that question相关联。 other answer也提供了有用的信息。

如果您想要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

答案 1 :(得分:3)

请确保您使用的是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();
    }
}

答案 2 :(得分:0)

我对使用Pattern方法的另一种方法很迟:splitAsStream()

String test = "Lobgasex loga nepe co so x";

List<Character> chars = Pattern.compile("").splitAsStream(test)
    .map(i -> i.charAt(0))
    .collect(Collectors.toList());