我发现了这个关于如何从Java字符串中获取java.util.streams.IntStream的问题,但是我在使用Java 8时未找到此方法。
更正:正如你们指出的那样,我正在使用Java 7。现在有chars()
方法。但是问题仍然存在:
我该如何从一个String中获取一个Stream<Character>
?
我发现了这个关于如何从Java字符串中获取java.util.streams.IntStream的问题,但是我在使用Java 8时未找到此方法。
更正:正如你们指出的那样,我正在使用Java 7。现在有chars()
方法。但是问题仍然存在:
我该如何从一个String中获取一个Stream<Character>
?
我原本想要指向我早前关于这个话题的回答,但事实证明你已经链接到了那个问题。另一个回答也提供了有用的信息。
如果您想要char
值,则可以使用String.chars()
返回的IntStream
并将int
值转换为char
而不会丢失信息。其他回答解释了为什么Stream
类没有CharStream
原始的特化。
如果您真的想要装箱的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
import java.util.stream.IntStream;
public class CharsSample {
public static void main(String[] args) {
String s = "123";
IntStream chars = s.chars();
}
}
我使用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());