协慌网

登录 贡献 社区

在 Java 中将数组转换为列表

如何将数组转换为 Java 中的列表?

我使用了Arrays.asList()但行为(和签名)以某种方式从 Java SE 1.4.2 (现在归档的文档)变为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);

答案

在您的示例中,这是因为您不能拥有基本类型的 List。换句话说, List<int>是不可能的。

但是,您可以使用包装int原语的Integer类来创建List<Integer> 。使用Arrays.asList实用程序方法将数组转换为List

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

请参阅IdeOne.com 上的代码

谈到转换方式,这取决于你为什么需要你的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时需要指定类型。

在 Java 8 中,您可以使用流:

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