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

新手上路,请多包涵

我有一个从 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 。打击和审判。 :)

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

原文由 Mono Jamoon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 757
2 个回答

只需使用这个:

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

注意:仍然不是线程安全的,如果你从另一个线程修改 otherList ,那么你可能想要制作那个 otherList (甚至 newListCopyOnWriteArrayList 例如, --- 或使用锁定原语,例如 ReentrantReadWriteLock 来序列化对同时访问的任何列表的读/写访问。

原文由 fge 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一个非常好的 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());

原文由 Dan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题