如何将数组如int[],转换为Java的列表List | Java Debug 笔记

174 阅读1分钟

如何将数组如int[],转换为Java的列表List | Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:

如何在Java中将数组转换为List?

我使用了Arrays.asList(),但是这个方法的行为(和签名)从Java SE 1.4.2(现在已归档的文档)到1.8,发生了改变,而我在网络上发现的大多数代码片段都使用1.4.2的行为。

例如:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam);
  • 在1.4.2上返回包含元素1,2,3的列表
  • 在1.5.0+上返回列表的地址

在许多情况下,它应该很容易检测到,但是有时可能会被忽视:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);

回答1:

在您的示例中,出现那种情况是因为您没有基本数据类型的列表。换句话说,得到List<int>是不可能的。

但是,您可以使用List<Integer>,利用Integer包装int:

Integer[] spam = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(spam);

看到此代码在IdeOne.com上实时运行

回答2:

在Java 8中,可以使用stream流方法:

int[] spam = new int[] { 1, 2, 3 };
Arrays.stream(spam)
      .boxed()
      .collect(Collectors.toList());

回答3:

说到转换方式,这取决于您为什么需要您的List。如果您只需要读取数据。好,你只需这么敲:

Integer[] values = { 1, 3, 7 };
List<Integer> list = Arrays.asList(values);

但是,如果您执行以下操作:

list.add(1);

你将会得到异常:java.lang.UnsupportedOperationException。因此,在某些情况下,您甚至需要这样做:

Integer[] values = { 1, 3, 7 };
List<Integer> list = new ArrayList<Integer>(Arrays.asList(values));

第一种方法实际上并不转换数组,而是“代表”它是List。但是数组具有其所有属性,如固定数量的元素。请注意,在构造时需要指定类型ArrayList

原文链接