我发现this question关于从java String中获取java.util.streams.IntStream但是我现在还没有找到这个方法,因为我正在使用Java 8。
更正:正如你们所指出的,我使用的是Java 7.现在方法chars()
就在那里。但问题仍然存在:
如何从字符串中获取Stream<Character>
?
答案 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());