如何在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);

当前回答

使用此函数将Array arr转换为List。 Arrays.stream (arr) .collect (Collectors.toList ());

定义泛型方法将数组转换为列表的示例:

public <T> List<T> fromArrayToList(T[] a) {   
    return Arrays.stream(a).collect(Collectors.toList());
}

其他回答

我也遇到过同样的问题,写了一个泛型函数,它接受一个数组,并返回一个具有相同内容的相同类型的ArrayList:

public static <T> ArrayList<T> ArrayToArrayList(T[] array) {
    ArrayList<T> list = new ArrayList<T>();
    for(T elmt : array) list.add(elmt);
    return list;
}

问题是在Java 5中引入了可变参数,不幸的是,Arrays.asList()也重载了一个可变参数版本。因此arrays. aslist (numbers)被Java 5编译器理解为int数组的可变参数。

这个问题在Effective Java第二版,第7章,第42项中有更详细的解释。

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)

如果使用整数值,则使用两行代码将数组转换为列表 必须对基本数据类型使用自动装箱类型

  Integer [] arr={1,2};
  List<Integer> listInt=Arrays.asList(arr);

我最近不得不将一个数组转换为List。稍后,程序过滤列表,试图删除数据。当你使用Arrays.asList(array)函数时,你创建了一个固定大小的集合:你既不能添加也不能删除。这篇文章比我更好地解释了这个问题:为什么当我试图从List中删除一个元素时,会得到一个UnsupportedOperationException ?

最后,我不得不做一个“手动”转换:

    List<ListItem> items = new ArrayList<ListItem>();
    for (ListItem item: itemsArray) {
        items.add(item);
    }

我想我可以使用list . addall (items)操作添加从数组到列表的转换。