使用Java8流forEach方法迭代字符数组
面对一个奇怪的问题 我尝试使用stream-foreach方法迭代char数组,它给出了编译时错误。如果我尝试使用integer数组进行相同的操作,则工作正常。有线索吗? 代码 给定编译器错误 类型数组中的方法流(T[])不适用于参数(char[]) 如果我将其更改为int数组,它就可以正常工作使用Java8流forEach方法迭代字符数组,java,java-8,java-stream,Java,Java 8,Java Stream,面对一个奇怪的问题 我尝试使用stream-foreach方法迭代char数组,它给出了编译时错误。如果我尝试使用integer数组进行相同的操作,则工作正常。有线索吗? 代码 给定编译器错误 类型数组中的方法流(T[])不适用于参数(char[]) 如果我将其更改为int数组,它就可以正常工作 我缺少什么?没有CharStream,这就是为什么没有数组。stream()方法接受char[]。其次是IntStream 您可以使用: input.chars().forEach(e -> Sy
我缺少什么?没有
CharStream
,这就是为什么没有数组。stream()
方法接受char[]
。其次是IntStream
您可以使用:
input.chars().forEach(e -> System.out.println((char) e));
您看到的实际错误是:
| 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
或
这个问题的其他答案还有其他选择。我知道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);
});
如果将字符向上转换为字符,则它将允许迭代。如果需要使用forEach,则应使用其循环版本:
String input = "test";
char[] chars = input.toCharArray();
for (char c : chars) {
System.out.println(c);
}
如果您确实需要流API forEach,可以将数组包装在列表中:
String input = "test";
char[] chars = input.toCharArray();
Arrays.asList(chars).stream().forEach(System.out::println);
更简单:Stream.of(chars.forEach(System.out::println)
char[] chars = input.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(chars);
Arrays.stream(charObjectArray).forEach((e) -> {
System.out.println(e);
});
String input = "test";
char[] chars = input.toCharArray();
for (char c : chars) {
System.out.println(c);
}
String input = "test";
char[] chars = input.toCharArray();
Arrays.asList(chars).stream().forEach(System.out::println);