在Java中获取Iterable的大小

2023/06/07

1.概述

在本快速教程中,我们将了解在Java中获取Iterable大小的各种方法。

2.可迭代和迭代器

Iterable是Java中集合类的主要接口之一。

Collection接口扩展了Iterable,因此Collection的所有子类也实现了Iterable。

Iterable只有一种生成Iterator的方法:

public interface Iterable<T> {
    public Iterator<T> iterator();    
}

然后可以使用此Iterator来迭代Iterable中的元素。

3.使用CoreJava的可迭代大小

3.1.for-each循环

所有实现Iterable的类都有资格使用Java中的for-each循环。

这允许我们循环遍历Iterable中的元素,同时递增计数器以获得其大小:

int counter = 0;
for (Object i : data) {
    counter++;
}
return counter;

3.2.集合.size()

在大多数情况下,Iterable将是Collection的实例,例如List或Set。

在这种情况下,我们可以检查Iterable的类型并调用它的size()方法来获取元素的数量。

if (data instanceof Collection) {
    return ((Collection<?>) data).size();
}

调用size()通常比遍历整个集合要快得多。

这是一个显示上述两种解决方案组合的示例:

public static int size(Iterable data) {

    if (data instanceof Collection) {
        return ((Collection<?>) data).size();
    }
    int counter = 0;
    for (Object i : data) {
        counter++;
    }
    return counter;
}

3.3.流.count()

如果我们使用Java 8,我们可以从Iterable创建一个Stream。

然后可以使用流对象来获取Iterable中元素的计数。

return StreamSupport.stream(data.spliterator(), false).count();

4.使用第三方库的可迭代大小

4.1.IterableUtils#size()

ApacheCommonsCollections库有一个很好的IterableUtils,它为Iterable实例提供静态实用方法。

在开始之前,我们需要从[MavenCentral](https://search.maven.org/classic/#search gav 1 g%3A”org.apache.commons”ANDa%3A”commons-collections4”)导入最新的依赖项:
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.1</version>
</dependency>

我们可以在Iterable对象上调用IterableUtils的size()方法来获取它的大小。

return IterableUtils.size(data);

4.2.迭代#size()

同样,GoogleGuava库也在其Iterables类中提供了一组静态实用方法来对Iterable实例进行操作。

在开始之前,我们需要从[MavenCentral](https://search.maven.org/classic/#search gav 1 g%3A”com.google.guava”ANDa%3A”guava”)导入最新的依赖项:
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

调用Iterables类的静态size()方法可以得到元素的数量。

return Iterables.size(data);

在幕后,IterableUtils和Iterables都使用3.1和3.2中描述的方法的组合来确定大小。

5.总结

在本文中,我们研究了在Java中获取Iterable大小的不同方法。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章