将可迭代转换为集合的简单方法

2022-08-31 04:26:55

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

这个库的方法返回 ,而我的代码的其余部分期望 。Iterable<T>Collection<T>

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


答案 1

在 JDK 8+ 中,不使用任何其他库:

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

编辑:上面的一个是.如果您正在处理 ,IteratorIterable

iterable.forEach(target::add);

答案 2

使用番石榴,您可以使用Lists.newArrayList(Iterable)Sets.newHashSet(Iterable)以及其他类似的方法。这当然会将所有元素复制到内存中。如果这是不可接受的,我认为与这些一起工作的代码应该采取而不是.番石榴也恰好提供了方便的方法,用于做一些你可以做的事情,使用一个(如或),但性能影响更为明显。IterableCollectionCollectionIterableIterables.isEmpty(Iterable)Iterables.contains(Iterable, Object)