4 回答

TA贡献1780条经验 获得超1个赞
我知道 Stream 的原因是接受字符,而不是字符。
其中 char 是表示单个 16 位 Unicode 字符的原始类型,而 Character 是一个包装类,允许我们以 OOP 方式使用 char 原始概念。
char[] chars = input.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(chars);
Arrays.stream(charObjectArray).forEach((e) -> {
System.out.println(e);
});
如果将 char 向上转换为 Character,那么它将允许迭代。

TA贡献1860条经验 获得超9个赞
没有CharStream
,这就是为什么没有Arrays.stream()
接受 的方法char[]
。下一个最接近的东西是IntStream
.
您可以使用:
input.chars().forEach(e -> System.out.println((char) e));

TA贡献1816条经验 获得超6个赞
如果你需要使用 forEach 你应该使用它的循环版本:
String input = "test";
char[] chars = input.toCharArray();
for (char c : chars) {
System.out.println(c);
}
如果您确实需要 Stream API forEach,您可以将数组包装在列表中:
String input = "test";
char[] chars = input.toCharArray();
Arrays.asList(chars).stream().forEach(System.out::println);

TA贡献1934条经验 获得超2个赞
您看到的实际错误是:
| no suitable method found for stream(char[])
| method java.util.Arrays.<T>stream(T[]) is not applicable
| (inference variable T has incompatible bounds
| equality constraints: char
| lower bounds: java.lang.Object)
| method java.util.Arrays.<T>stream(T[],int,int) is not applicable
| (cannot infer type-variable(s) T
| (actual and formal argument lists differ in length))
| method java.util.Arrays.stream(int[]) is not applicable
| (argument mismatch; char[] cannot be converted to int[])
| method java.util.Arrays.stream(long[]) is not applicable
| (argument mismatch; char[] cannot be converted to long[])
| method java.util.Arrays.stream(double[]) is not applicable
因此,如果您查看该类的文档java.util.Arrays
并查找该stream
方法,您确实只会看到该stream
方法被重载了
double[]
返回一个DoubleStream
int[]
返回一个IntStream
long[]
返回一个LongStream
T[]
返回一个Stream<T>
只是没有一个CharStream
.
恕我直言,你最好的选择是:
jshell> String input = "test";
input ==> "test"
jshell> input.codePoints().forEach((c) -> { System.out.println(c); })
116
101
115
116
或者
jshell> input.codePoints().forEach((c) -> { System.out.println((char)c); })
t
e
s
t
这个问题的其他答案有其他选择。
添加回答
举报