如何在Java中将数组转换为列表?
我使用了Arrays.asList(),但行为(和签名)不知怎么地从Java SE 1.4.2(文档现在存档)改变到8,我在web上找到的大多数代码片段都使用1.4.2行为。
例如:
int[] numbers = new int[] { 1, 2, 3 };
Arrays.asList(numbers)
在1.4.2返回一个包含元素1,2,3的列表
在1.5.0+上返回包含数组'numbers'的列表
在许多情况下,它应该很容易被发现,但有时它会被忽视:
Assert.assertTrue(Arrays.asList(numbers).indexOf(4) == -1);
Int是一个原语。原语不能接受空值,只能有默认值。因此,要接受null,您需要使用包装器类Integer。
选项1:
int[] nos = { 1, 2, 3, 4, 5 };
Integer[] nosWrapped = Arrays.stream(nos).boxed()
.toArray(Integer[]::new);
nosWrapped[5] = null // can store null
选项2:
您可以使用任何使用包装器类Integer的数据结构
int[] nos = { 1, 2, 3, 4, 5 };
List<Integer> = Arrays.asList(nos)
因此,这取决于您正在尝试的Java版本
Java 7
Arrays.asList(1, 2, 3);
OR
final String arr[] = new String[] { "G", "E", "E", "K" };
final List<String> initialList = new ArrayList<String>() {{
add("C");
add("O");
add("D");
add("I");
add("N");
}};
// Elements of the array are appended at the end
Collections.addAll(initialList, arr);
OR
Integer[] arr = new Integer[] { 1, 2, 3 };
Arrays.asList(arr);
在Java 8中
int[] num = new int[] {1, 2, 3};
List<Integer> list = Arrays.stream(num)
.boxed().collect(Collectors.<Integer>toList())
参考资料- http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/
使用数组
这是将数组转换为List的最简单方法。但是,如果您试图从列表中添加新元素或删除现有元素,则会抛出UnsupportedOperationException异常。
Integer[] existingArray = {1, 2, 3};
List<Integer> list1 = Arrays.asList(existingArray);
List<Integer> list2 = Arrays.asList(1, 2, 3);
// WARNING:
list2.add(1); // Unsupported operation!
list2.remove(1); // Unsupported operation!
使用数组列表或其他列表实现
你可以使用for循环将数组的所有元素添加到List实现中,例如ArrayList:
List<Integer> list = new ArrayList<>();
for (int i : new int[]{1, 2, 3}) {
list.add(i);
}
在Java 8中使用流API
您可以将数组转换为流,然后使用不同的收集器收集流:Java 8中的默认收集器在屏幕后面使用ArrayList,但您也可以强加您的首选实现。
List<Integer> list1, list2, list3;
list1 = Stream.of(1, 2, 3).collect(Collectors.toList());
list2 = Stream.of(1, 2, 3).collect(Collectors.toCollection(ArrayList::new));
list3 = Stream.of(1, 2, 3).collect(Collectors.toCollection(LinkedList::new));
参见:
为什么我们在Java中使用自动装箱和解箱?
什么时候用链表代替数组列表?