Arrays.asList(word.toCharArray())不返回列表吗? - java

我正在尝试将String转换为Stream<Character>并遇到了这个奇怪的事情。

似乎word.toCharArray()返回一个数组,但是当我尝试通过Arrays.asList(word.toCharArray())将其转换为列表时,它似乎失败了(输出是一个完整的完整String)。

这里发生了什么?

   @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;
   }

这是输出:

H
E
L
L
O
HELLO
HELLO

参考方案

这里发生了什么?

这是Arrays.asList的签名:

 public static <T> List<T> asList​(T... a)

首先观察到T必须是引用类型。所有Java类型参数都是引用类型。

第二个观察结果是a是varargs参数。这意味着a可以表示为一个或多个T实例……或T[]

以你的例子。似乎您希望以下表达式生成charCharacter的列表。

 Arrays.asList(word.toCharArray())

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

其次,无法生成List<Character>,因为签名不允许这样做。我们试试吧。如果TCharacter,则替换为

   public static List<Character> asList(Character... a)

但是Character实际上是Character[],而word.toCharArray()会生成char[]。 (并且Java语言不会将char[]转换为Character[]。)

实际上,实际发生的是Tchar[]匹配,并且Arrays.asList的结果将是List<char[]>。得到的对象将是一个大小为1的列表,带有一个char[]元素,其中包含word的所有字符。

Java-固定大小的列表与指定初始容量的列表之间的差异 - java

我在理解这一点上遇到了问题。当我们做 List<Integer> list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List<Integer> list2 = new A…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

添加新商品时如何初始化计数器 - java

我有如下所示的数组public static void main(String[] args) { List asList = Arrays.asList("banner","carousel","banner","carousel","banner"); S…