使用时如何在List中添加元素Arrays.asList()

时间:2013-08-22 19:13:47

标签: java list

我们无法对从<Collection>.add获取的集合执行<Collection>.addAllArrays.asList操作。只允许删除操作。

那么如果我遇到需要在List中添加新元素而不删除List中的先前元素的情况,该怎么办?我怎样才能做到这一点?

8 个答案:

答案 0 :(得分:56)

使用构造函数创建一个新的ArrayList

List<String> list = new ArrayList<String>(Arrays.asList("a", "b"));

答案 1 :(得分:12)

一种方法是构建一个新的ArrayList

List<T> list = new ArrayList<T>(Arrays.asList(...));

完成后,您可以随意修改list

答案 2 :(得分:4)

您可以使用Java8流来处理中间ArrayList

    Integer[] array = {1, 2, 3};
    List<Integer> list = Streams.concat(Arrays.stream(array),
                                        Stream.of(4)).collect(Collectors.toList());

这应该非常有效,因为它可以迭代数组并预先分配目标列表。对于大型阵列,它可能会或可能不会更好。一如既往,如果重要,你必须衡量。

答案 3 :(得分:3)

Collection的构造函数(例如以下示例中的ArrayList)将数组作为列表,并使用该列表的元素构造新实例。

List<T> list = new ArrayList<T>(Arrays.asList(...));

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#ArrayList(java.util.Collection)

答案 4 :(得分:3)

Arrays.asList()生成一个实际由数组支持的列表,它是一个变形为列表的数组。您可以将其用作列表,但不能对其执行某些操作,例如添加新元素。所以最好的选择是将它传递给另一个列表obj的构造函数:

List<T> list = new ArrayList<T>(Arrays.asList(...));

答案 5 :(得分:0)

Arrays.asList()

生成关于对象创建的不可修改列表。您可以使用以下代码。

List list = Collections.synchronizedList(new ArrayList(...));

此转换允许列表添加和删除对象。我只在Java 8中测试过。

答案 6 :(得分:0)

ArrayList<Object> MyObjectList = new ArrayList<>();
Arrays.asList(params[1]).forEach((item)-> {
    MyObjectList.add(item);
});

答案 7 :(得分:0)

如今,Streams API 可以以简洁且实用的方式轻松为您提供ArrayList

Stream.of("str1", "str2").collect(Collectors.toList()));

当然,这也可以灵活地使用映射进行转换。例如,在为 Spring 安全代码编写单元测试时,编写以下内容很方便:

Stream.of("ROLE_1", "ROLE_2").map(SimpleGrantedAuthority::new).collect(Collectors.toList()));

Collectors.toList 返回的列表是一个 ArrayList,可以根据您的代码要求进行修改。