java - 无法将 char[] 转换为 java 8 中的流

标签 java java-8 java-stream

<分区>

我正在编写一个程序,其中一个方法将 char[][] 作为输入并返回 char[]。方法如下 -

private static char[] getTableFromTwoChits(char[][] inputTwoChits) {
    Map<Character, Character> map = new HashMap<>();
    Arrays.stream(inputTwoChits).forEach(x -> map.put(x[0], x[1]));
    map.entrySet().forEach(System.out::println);
    char[] result = new char[inputTwoChits.length+1]; int index=0;
    char startPoint = inputTwoChits[0][0];
    do {
       result[index] = startPoint;index++;
       startPoint = map.get(startPoint);
    }while(startPoint != inputTwoChits[0][0]);
    result[index] = startPoint;
    return result;
}


主要方法如下-

public static void main(String[] args) {
    char[][] inputTwoChits = {{'A','B'},{'C','D'},{'B','C'},{'E','F'},{'F','A'},{'D','E'}};
    char[] outputTwoChits = getTableFromTwoChits(inputTwoChits);
    Arrays.stream(outputTwoChits).forEach(System.out::println);

}


方法 getTableFromTwoChits() 中的第 2 行编译正常,而 main 方法的第 3 行未编译。
请解释这种行为背后的原因是什么?

编译错误如下 -

/CircularTableTwoChits.java:21: error: no suitable method found for stream(char[])
        Arrays.stream(outputTwoChits).forEach(System.out::println);
              ^
    method Arrays.<T#1>stream(T#1[]) is not applicable
      (inference variable T#1 has incompatible bounds
        equality constraints: char
        upper bounds: Object)
    method Arrays.<T#2>stream(T#2[],int,int) is not applicable
      (cannot infer type-variable(s) T#2
        (actual and formal argument lists differ in length))
    method Arrays.stream(int[]) is not applicable
      (argument mismatch; char[] cannot be converted to int[])
    method Arrays.stream(long[]) is not applicable
      (argument mismatch; char[] cannot be converted to long[])
    method Arrays.stream(double[]) is not applicable
      (argument mismatch; char[] cannot be converted to double[])
  where T#1,T#2 are type-variables:
    T#1 extends Object declared in method <T#1>stream(T#1[])
    T#2 extends Object declared in method <T#2>stream(T#2[],int,int)
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

最佳答案

只有四种流类型,分别是intlongdouble元素和引用类型(对象)。因此,由于没有 char 流,Arrays.stream 不能应用于 char[] 数组。

字符流的规范表示是 IntStream 并且在没有复制或装箱开销的情况下获取它就像

CharBuffer.wrap(charArray).chars().forEach(c -> System.out.println((char)c));

由于 int 值的默认解释是“整数”,您需要使用 lambda 表达式将其转换为 char 以将其解释为“字符”。

如果你不需要字符之间的换行符,你可以简单地在一行中打印整个数组,通过

System.out.println(String.valueOf(charArray));

关于java - 无法将 char[] 转换为 java 8 中的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48049567/

相关文章:

java - 在一个参数化类(junit)中创建多个参数集

java - 父类中的私有(private)字段 - java

java - Hibernate 不创建表 - Spring MVC

android - 如何使用 auto devops 定位 .gitlab-ci.yml 中的较新版本(java 11 而不是 8,Android 31 而不是 29)

java - 查找迭代次数

java - 循环多个不同类型的列表并使用 java 8 lambda 表达式创建另一个列表

java - 使用 Java Streams 将对象列表转换为带过滤器的字符串列表

java - 抽象路径在 java.io 中意味着什么?

java - 如何在 Set 中返回一个不同的对象并求和一个公共(public)值?

java - 从 FileChannel 读取所有行到字符串流