Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arrays.asList(word.toCharArray())不返回列表?_Java_Arrays_String_Java 8_Java Stream - Fatal编程技术网

Java Arrays.asList(word.toCharArray())不返回列表?

Java Arrays.asList(word.toCharArray())不返回列表?,java,arrays,string,java-8,java-stream,Java,Arrays,String,Java 8,Java Stream,我试图将一个字符串转换成一个流,遇到了这个奇怪的事情 看起来word.toCharArray返回了一个数组,但是当我试图将它转换成一个数组列表时,它似乎失败了,输出是一个完整的字符串 这是怎么回事 @Test public void testCharacterStream() { characterStreamNew("HELLO"); } private Stream<Character> characterStreamNew(String

我试图将一个字符串转换成一个流,遇到了这个奇怪的事情

看起来word.toCharArray返回了一个数组,但是当我试图将它转换成一个数组列表时,它似乎失败了,输出是一个完整的字符串

这是怎么回事

   @Test
   public void testCharacterStream() {
       characterStreamNew("HELLO");
   }

   private Stream<Character> characterStreamNew(String word) {
      for(Character c: word.toCharArray()) {
          out.println(c);
      }
      Arrays.asList(word.toCharArray()).stream()
              .peek(out::println)
              .forEachOrdered(out::println);
      return null;
   }
您可以使用如下字符:

word.chars()
        .mapToObj(c -> (char) c)
        .forEachOrdered(System.out::println);
输出

H
E
L
L
O
您的方法可以如下所示:

private static Stream<Character> characterStreamNew(String word) {
    return word.chars().mapToObj(c -> (char) c);
}
您可以使用如下字符:

word.chars()
        .mapToObj(c -> (char) c)
        .forEachOrdered(System.out::println);
输出

H
E
L
L
O
您的方法可以如下所示:

private static Stream<Character> characterStreamNew(String word) {
    return word.chars().mapToObj(c -> (char) c);
}
这是怎么回事

   @Test
   public void testCharacterStream() {
       characterStreamNew("HELLO");
   }

   private Stream<Character> characterStreamNew(String word) {
      for(Character c: word.toCharArray()) {
          out.println(c);
      }
      Arrays.asList(word.toCharArray()).stream()
              .peek(out::println)
              .forEachOrdered(out::println);
      return null;
   }
以下是Arrays.asList的签名:

首先,List不是有效的Java类型,因为char不是引用类型

第二,无法生成列表,因为签名不允许这样做。让我们试试看。如果T是字符,那么替换将是

   public static List<Character> asList(Character... a)
但是Character实际上意味着Character[],word.toCharArray生成char[]。Java语言不会将char[]转换为Character[]

事实上,实际发生的是T与char[]匹配,Arrays.asList的结果将是一个列表。您得到的对象将是一个大小为1的列表,其中包含一个char[]元素,该元素包含word的所有字符

这是怎么回事

   @Test
   public void testCharacterStream() {
       characterStreamNew("HELLO");
   }

   private Stream<Character> characterStreamNew(String word) {
      for(Character c: word.toCharArray()) {
          out.println(c);
      }
      Arrays.asList(word.toCharArray()).stream()
              .peek(out::println)
              .forEachOrdered(out::println);
      return null;
   }
以下是Arrays.asList的签名:

首先,List不是有效的Java类型,因为char不是引用类型

第二,无法生成列表,因为签名不允许这样做。让我们试试看。如果T是字符,那么替换将是

   public static List<Character> asList(Character... a)
但是Character实际上意味着Character[],word.toCharArray生成char[]。Java语言不会将char[]转换为Character[]

事实上,实际发生的是T与char[]匹配,Arrays.asList的结果将是一个列表。您得到的对象将是一个大小为1的列表,其中有一个char[]元素,该元素包含word的所有字符。

String.ToCharray返回一个对象:字符串数组。 因此,在这里,您流式处理一个列表,其中包含一个元素:代码中的字符串数组

 Arrays.asList(word.toCharArray()).stream()
              .peek(out::println)
              .forEachOrdered(out::println);
而你得到的结果。 因此,你应该尝试另一种方式来实现你所追求的目标

事实上,没有直接的方法来获得字符流,因为它不存在的开箱即用。最接近的是IntStream,它可以处理int流,但也可以处理short流或char流

正如YCF_L所建议的,您可以使用返回IntStream的String.chars或String.codePoints。 字符的整数表示不适合人类阅读,因此需要使用mapToObj将int元素转换为char

String.toCharArray返回一个对象:字符串数组。 因此,在这里,您流式处理一个列表,其中包含一个元素:代码中的字符串数组

 Arrays.asList(word.toCharArray()).stream()
              .peek(out::println)
              .forEachOrdered(out::println);
而你得到的结果。 因此,你应该尝试另一种方式来实现你所追求的目标

事实上,没有直接的方法来获得字符流,因为它不存在的开箱即用。最接近的是IntStream,它可以处理int流,但也可以处理short流或char流

正如YCF_L所建议的,您可以使用返回IntStream的String.chars或String.codePoints。 字符的整数表示不适合人类阅读,因此需要使用mapToObj将int元素转换为char

相关:基于int,但char和Character有相同的问题。将不会投票以重复方式关闭,因为问题的解释与解决方案不同。列表仅支持引用,不支持原语。Arrays.asList不会自动装箱char[]的元素,而是返回一个包含一个char[]引用的列表。相关:基于int,但char vs Character有相同的问题。将不会投票以重复方式关闭,因为问题的解释与解决方案不同。列表仅支持引用,不支持原语。Arrays.asList不会自动装箱char[]的元素,而是返回一个包含一个char[]引用的列表。