将 Iterable 转换为 Collection 的简单方法

新手上路,请多包涵

在我的应用程序中,我使用 3rd 方库(确切地说是用于 MongoDB 的 Spring Data)。

该库的方法返回 Iterable<T> ,而我的其余代码期望 Collection<T>

是否有任何实用方法可以让我快速将一种转换为另一种?我想避免在我的代码中为这么简单的事情创建一堆 foreach 循环。

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

阅读 861
2 个回答

使用 Guava ,您可以使用 Lists.newArrayList(Iterable)Sets.newHashSet(Iterable) 以及其他类似方法。这当然会将所有元素复制到内存中。如果这是不可接受的,我认为您的代码应该采用 Iterable 而不是 Collection 。 Guava also happens to provide convenient methods for doing things you can do on a Collection using an Iterable (such as Iterables.isEmpty(Iterable) or Iterables.contains(Iterable, Object) ) ,但性能影响更明显。

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

在 JDK 8+ 中,不使用任何额外的库:

 Iterator<T> source = ...;
List<T> target = new ArrayList<>();
source.forEachRemaining(target::add);

编辑:上面的是 Iterator 。如果您正在处理 Iterable

 iterable.forEach(target::add);

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

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