使用Java8流forEach方法迭代字符数组

使用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

面对一个奇怪的问题 我尝试使用stream-foreach方法迭代char数组,它给出了编译时错误。如果我尝试使用integer数组进行相同的操作,则工作正常。有线索吗? 代码

给定编译器错误 类型数组中的方法流(T[])不适用于参数(char[])

如果我将其更改为int数组,它就可以正常工作


我缺少什么?

没有
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);