如何将 java.util.List 复制到另一个 java.util.List 中

2022-08-31 07:09:46

我有一个从 Web 服务填充的。我想将该列表的内容复制/克隆到相同类型的空列表中。谷歌搜索复制列表建议我使用方法。在我看到的所有示例中,目标列表应该包含复制发生的确切项目数。List<SomeBean>Collections.copy()

由于我使用的列表是通过Web服务填充的,并且它包含数百个对象,因此我无法使用上述技术。或者我用错了??!!无论如何,为了让它工作,我试图做这样的事情,但我仍然得到了一个.IndexOutOfBoundsException

List<SomeBean> wsList = app.allInOne(template);

List<SomeBean> wsListCopy=new ArrayList<SomeBean>(wsList.size());   
Collections.copy(wsListCopy,wsList);
System.out.println(wsListCopy.size());

我试图使用,但我在代码中得到了一个后面的。命中并试用。:)wsListCopy=wsList.subList(0, wsList.size())ConcurrentAccessException

无论如何,我的问题很简单,如何将列表的全部内容复制到另一个列表中?当然,不是通过迭代。


答案 1

只需使用这个:

List<SomeBean> newList = new ArrayList<SomeBean>(otherList);

注意:仍然不是线程安全的,如果你从另一个线程进行修改,那么你可能想要使它成为(甚至)一个CopyOnWriteArrayList,例如 - 或者使用一个锁原语,如ReentrantReadWriteLock来序列化对任何并发访问的列表的读/写访问。otherListotherListnewList


答案 2

这是一个非常好的Java 8方法:

List<String> list2 = list1.stream().collect(Collectors.toList());

当然,这里的优点是您可以过滤并跳到仅复制列表的一部分。

例如:

//don't copy the first element 
List<String> list2 = list1.stream().skip(1).collect(Collectors.toList());