在Java中将数组转换为列表

1279

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

我使用了Arrays.asList(),但其行为(及签名)从Java SE 1.4.2(文档现已存档)到8发生了变化,大多数我在网上找到的代码片段都使用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);

25
我认为您的示例有问题:Arrays.asList(new int[] { 1, 2, 3 });在Java 1.4.2中绝对无法编译通过,因为一个 int[] 不是一个 Object[]。请注意,这里的关键问题是 int[]Object[] 之间的转换。 - Joachim Sauer
1
哦,你可能是对的。在发布之前,我没有Java 1.4.2编译器来测试我的示例。现在,在你的评论和Joe的回答之后,一切都变得更加清晰明了。 - Alexandru
1
我认为自动装箱应该已经涵盖了从原始类型到包装类 Integer 的转换。您可以先进行强制转换,然后上述 Arrays.asList 代码就可以正常工作了。 - Horse Voice
2
Java 8的Stream.boxed()会处理自动装箱并可用于此。请参见我的答案下面 - Ibrahim Arief
25个回答

7

一句话概括:

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

7
如果���的目标是使用Java 8(或更高版本),你可以尝试这样做:
int[] numbers = new int[] {1, 2, 3, 4};
List<Integer> integers = Arrays.stream(numbers)
                        .boxed().collect(Collectors.<Integer>toList());

注意:

请注意Collectors.<Integer>toList(),这个泛型方法可以帮助你避免错误"Type mismatch: cannot convert from List<Object> to List<Integer>"。


6

你需要将其转换为数组

Arrays.asList((Object[]) array)

3
Java: 不兼容的类型:int[] 无法转换为 java.lang.Object[]。 - Dmitry
@dVaffection 然后转换为 int[]。重要的部分是要转换为数组。 - Nebril

4
  1. Using Guava:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = Lists.newArrayList(sourceArray);
    
  2. Using Apache Commons Collections:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = new ArrayList<>(6);
    CollectionUtils.addAll(list, array);
    

4

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

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

3

给定数组:

    int[] givenArray = {2,2,3,3,4,5};

将整数数组转换为整数列表

一种方法:使用boxed()方法 -> 返回IntStream

    List<Integer> givenIntArray1 = Arrays.stream(givenArray)
                                  .boxed()
                                  .collect(Collectors.toList());

第二种方式:将流中的每个元素映射为Integer,然后进行收集

注意: 使用mapToObj可以将每个int元素转换为字符串流、字符流等,方法是将i转换为(char)i。

    List<Integer> givenIntArray2 = Arrays.stream(givenArray)
                                         .mapToObj(i->i)
                                         .collect(Collectors.toList());

将一个数组类型转换为另一个类型的示例:

List<Character> givenIntArray2 = Arrays.stream(givenArray)
                                             .mapToObj(i->(char)i)
                                             .collect(Collectors.toList());

1
使用两行代码将数组转换为列表,如果您在整数值中使用它,则必须使用原始数据类型的自动装箱类型。
  Integer [] arr={1,2};
  List<Integer> listInt=Arrays.asList(arr);

这是最简单的方法,应该标记为正确答案。谢谢@yousef - Jose Anibal Rodriguez

1
所以这取决于你正在尝试使用哪个Java版本-

Java 7

 Arrays.asList(1, 2, 3);

或者

       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);

或者

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/


1
截至Java 8,以下代码应该可以实现。
int[] temp = {1, 2, 3, 4, 5};
List<Integer> tempList = Arrays.stream(temp).boxed().collect(Collectors.toList());

1
使用此代码将数组 arr 转换为列表: Arrays.stream(arr).collect(Collectors.toList()); 定义一个通用方法将数组转换为列表的示例:
public <T> List<T> fromArrayToList(T[] a) {   
    return Arrays.stream(a).collect(Collectors.toList());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接