如何将数组如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);
回答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。