在我的应用程序中,我使用 3rd 方库(确切地说是用于 MongoDB 的 Spring Data)。
该库的方法返回 Iterable<T>
,而我的其余代码期望 Collection<T>
。
是否有任何实用方法可以让我快速将一种转换为另一种?我想避免在我的代码中为这么简单的事情创建一堆 foreach
循环。
原文由 Ula Krukar 发布,翻译遵循 CC BY-SA 4.0 许可协议
在我的应用程序中,我使用 3rd 方库(确切地说是用于 MongoDB 的 Spring Data)。
该库的方法返回 Iterable<T>
,而我的其余代码期望 Collection<T>
。
是否有任何实用方法可以让我快速将一种转换为另一种?我想避免在我的代码中为这么简单的事情创建一堆 foreach
循环。
原文由 Ula Krukar 发布,翻译遵循 CC BY-SA 4.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 许可协议
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
3 回答1.7k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
使用 Guava ,您可以使用 Lists.newArrayList(Iterable) 或 Sets.newHashSet(Iterable) 以及其他类似方法。这当然会将所有元素复制到内存中。如果这是不可接受的,我认为您的代码应该采用
Iterable
而不是Collection
。 Guava also happens to provide convenient methods for doing things you can do on aCollection
using anIterable
(such asIterables.isEmpty(Iterable)
orIterables.contains(Iterable, Object)
) ,但性能影响更明显。