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

当前回答

一行程序:

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

其他回答

如果你使用Apache common -lang,另一个解决方法是:

int[] numbers = new int[] { 1, 2, 3 };
Arrays.asList(ArrayUtils.toObject(numbers));

ArrayUtils的地方。toObject将int[]转换为Integer[]

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

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

如果您正在尝试优化内存等(并且不想引入外部库),那么实现您自己的不可变“数组视图列表”比您想象的要简单——您只需要扩展java.util.AbstractList。

class IntArrayViewList extends AbstractList<Integer> {
    int[] backingArray;
    int size;

    IntArrayViewList(int[] backingArray, int size) {
        this.backingArray = backingArray;
        this.size = size;
    }

    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            int i = 0;

            @Override
            public boolean hasNext() {
                return i < size;
            }

            @Override
            public Integer next() {
                return get(i++);
            }
        };
    }

    public int size() {
        return size;
    }

    public Integer get(int i) {
        return backingArray[i];
    }
}

使用番石榴: Integer[] array = {1,2,3}; List<Integer> List = Lists.newArrayList(sourceArray); 使用Apache Commons Collections: Integer[] array = {1,2,3}; List<Integer> List = new ArrayList<>(6); CollectionUtils。addAll(列表、数组);

更短:

List<Integer> list = Arrays.asList(1, 2, 3, 4);