将Java中的Iterable转为Collection

将Java中的Iterable转为Collection

在Java编程中,我们常常需要处理集合类数据,而Java集合类库中的两个常见接口IterableCollection,是我们常用到的。虽然它们都可以遍历集合元素,但它们又有所不同。其中Iterable表示一类可以遍历的元素,而Collection表示实际包含有元素的集合。

我们可能在开发中需要将Iterable类型的对象转换为Collection类型的对象,以便进一步进行操作和处理。比如,我们需要从文件中读取一些数据,此时拿到的往往是Iterator类型的集合,如果直接将它传递给只接受Collection类型的方法,则编译器会提示错误,需要进行类型转换。

接下来就让我们一起来了解如何将Iterable类型转换为Collection类型吧。

示例代码

我们首先来看下面的Java语言代码示例,它展示了将Iterable类型转换为Collection类型的实现方式。

Iterable<String> itr = new ArrayList<>();
itr.forEach(System.out::println);

Collection<String> col = new ArrayList<>();
itr.forEach(col::add);

以上代码,首先我们创建了一个Iterable<String>类型的数组列表对象itr,然后使用forEach()方法遍历输出其中的元素。接着创建了一个Collection<String>类型的数组列表对象col,通过迭代器中的每个元素调用add方法,将其中的元素添加到col中去。最终我们得到了一个类型为Collection的对象col,它可以进行类似集合操作的其他操作。

在以上示例代码中,我们使用了forEach方法遍历两个集合中的元素,这种方法是基于Iterator实现的。所以,通过调用其内部的next()方法来遍历整个Iterable集合。

需要注意的是,尽管可以使用forEach等方法对Iterable集合进行遍历,实际上Iterable是没有add等修改元素的方法。因此,我们需要先创建一个Collection类型对象,然后再将其添加到该对象中。

接下来,我们来了解一些其他实现方式。

实现方式

方式一:遍历添加

我们已经在前面的示例代码中看到了,将Iterable类型转换为Collection类型的最常见方式就是遍历,然后将元素一个个加入到Collection中。

具体的实现代码如下:

Iterable<String> itr = new ArrayList<>();
Collection<String> col = new ArrayList<>();

for (String s : itr) {
    col.add(s);
}

以上代码,我们创建了一个Iterable的列表,然后创建了一个ArrayList类型的Collection对象col,然后定义一个foreach循环,不断从Iterable中取出元素并添加到Collection中去。最终得到的col对象就是我们需要的Collection类型对象。

需要注意的是,这种方式虽然简单易用,但是会引起不必要的性能浪费,当元素非常多时,性能会大大降低。

方式二:使用Java 8中的stream

Java 8中的Stream已经成为了Java中的重要特性之一,其中的一些方法可以用来操作集合类型数据。

我们可以通过将Iterable转换为Stream,然后使用strem中的对应方法将其转换为Collection类型。具体的实现代码如下:

Iterable<String> itr = new ArrayList<>();
Collection<String> col = StreamSupport.stream(itr.spliterator(), false).collect(Collectors.toList());

在这个示例代码中,我们首先使用了spliterator()方法将 Iterable 转换为 Spliterator ,然后再通过 StreamSupport.stream() 将其转换为 stream() 。 最后通过collect(Collectors.toList())方法将流中的元素收集到一个List中去,该List即为我们需要的Collection类型。

需要注意的是,在将Iterable转换为Stream时,需要使用Spliterator,它是流式编程中的一个重要概念,代表一个可以被分迭代的元素序列。

方式三:使用Apache Commons Collections

在Apache Commons Collections库中,提供了一种快速将Iterable转换为Collection类型的方式。具体的实现代码如下:

Iterable<String> itr = new ArrayList<>();
Collection<String> col = org.apache.commons.collections4.IterableUtils.toList(itr);

以上代码中,我们使用Apache Commons Collections库中的IterableUtils.toList()方法,将Iterable对象转换为Collection对象。

需要注意的是,该库对Java 8提供了很好的支持,还有很多其他实用的方法,可以在实际开发中发挥作用。

结论

在Java编程中,常常需要处理集合类型的数据,将Iterable类型转换为Collection类型是一个常见需求。本文介绍了三种实现方式,包括遍历添加、使用Java 8中的Stream以及使用Apache Commons Collections库。不同的方法适用于不同的场景,具体的选择需要根据实际的需要和性能要求进行考量。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程