我有一个从网络服务填充的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。先打后审。:)
无论如何,我的问题很简单,我如何才能将列表的全部内容复制到另一个列表中?当然,不是通过迭代实现的。
发布于 2013-01-14 21:53:45
只需使用以下命令:
List<SomeBean> newList = new ArrayList<SomeBean>(otherList);注意:仍然不是线程安全的,如果您从另一个线程修改otherList,那么您可能希望使该otherList (甚至是newList)成为锁,或者使用锁原语(如ReentrantReadWriteLock )来序列化对并发访问的任何列表的读/写访问。
发布于 2015-12-10 20:36:51
这是一种非常好的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());发布于 2016-04-04 18:26:32
originalArrayList.addAll(copyArrayofList);请记住,每当使用addAll()方法进行复制时,引用相同对象的两个数组列表(originalArrayList和copyArrayofList)的内容将被添加到列表中,因此如果您修改其中任何一个,则copyArrayofList也将反映相同的更改。
如果不想产生副作用,则需要将每个of元素从originalArrayList复制到copyArrayofList中,就像使用for或while循环一样。对于深度复制,你可以使用下面的代码片段。
但是您还需要做一件事,实现Cloneable接口并覆盖SomeBean类的clone()方法。
public static List<SomeBean> cloneList(List<SomeBean> originalArrayList) {
List<SomeBean> copyArrayofList = new ArrayList<SomeBean>(list.size());
for (SomeBean item : list) copyArrayofList.add(item.clone());
return clone;
}https://stackoverflow.com/questions/14319732
复制相似问题