📌  相关文章
📜  在Java中将 Iterable 转换为 Collection(1)

📅  最后修改于: 2023-12-03 14:51:17.297000             🧑  作者: Mango

在 Java 中将 Iterable 转换为 Collection

我们经常需要将一个 Iterable 转换为 Collection 来方便地对其进行遍历、操作等操作。这个过程并不复杂,本文将提供多种实现方式供程序员参考。

方法一:使用 Collection 的构造函数

Java 中,Collection 接口的实现类一般都有对应的构造函数,可以接受 Iterable 作为参数进行构造。因此,我们可以直接使用这个构造函数将一个 Iterable 转换为对应的 Collection。这个方法适用于任何实现了 Collection 的类。

Iterable<T> iterable = ...;
Collection<T> collection = new ArrayList<>(iterable);

这里我们将 iterable 转换为 ArrayList 类型的 collection,同样也可以使用其他实现 Collection 接口的类进行转换。

方法二:使用 Guava 的工具类

Guava 是 Google 推出的一款 Java 工具库,提供了很多方便的工具类和方法。其中 Lists 类提供了一个 newArrayList 方法,可以接受 Iterable 作为参数,返回对应的 ArrayList。因此,我们可以使用 Guava 来进行转换:

Iterable<T> iterable = ...;
List<T> list = Lists.newArrayList(iterable);

需要注意的是,这个方法需要在项目中引入 Guava 库。

方法三:使用 Stream API

Java 8 中引入了 Stream API,提供了丰富的流操作。我们可以使用 Stream API 将一个 Iterable 转换为 List

Iterable<T> iterable = ...;
List<T> list = StreamSupport.stream(iterable.spliterator(), false)
                             .collect(Collectors.toList());

这里我们先使用 stream 方法将 iterable 转为 Stream,然后使用 Collectors.toList() 方法将流转为 List

需要注意的是,这个方法在处理大容量数据时需要保证性能。

方法四:手动遍历并添加元素

以下方法可以适用于任何实现了 Iterable 的类,但需要手动遍历元素,并一一添加到 List 中。

Iterable<T> iterable = ...;
List<T> list = new ArrayList<>();
for (T element : iterable) {
    list.add(element);
}

这个方法比较繁琐,但可以确保在各种情况下都能成功转换。

结论

以上是将 Iterable 转换为 Collection 的几种方法,每种方法有其优缺点和适用场景。程序员可以根据自己的需求选择合适的转换方式。