用Java獲取可迭代的大小

1.概述

在本快速教程中,我們將學習獲得Java Iterable大小的各種方法。

2. Iterable和Iterator

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

Collection接口擴展了Iterable ,因此Collection的所有子類也實現Iterable

Iterable只有一種產生Iterator的方法

public interface Iterable<T> {

 public Iterator<T> iterator();

 }

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

3.使用Core Java的可迭代大小

3.1。每個循環

所有實現Iterable的類均適用於Java中的for-each循環。

這使我們可以在遞增計數器以獲取其大小的同時循環遍歷Iterable中的元素:

int counter = 0;

 for (Object i : data) {

 counter++;

 }

 return counter;

3.2。 Collection.size()

在大多數情況下, Iterable將是Collection的一個實例例如ListSet

在這種情況下,我們可以檢查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。 Stream.count()

如果使用Java 8,則可以從Iterable創建

然後,可以使用流對象獲取Iterable中的元素計數。

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

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

4.1。 IterableUtils#size()

Apache Commons Collections庫有一個不錯的IterableUtils類,它為Iterable實例提供靜態實用程序方法。

在開始之前,我們需要從Maven Central導入最新的依賴項:

<dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-collections4</artifactId>

    <version>4.1</version>

 </dependency>

我們可以調用一個迭代的對象上IterableUtils大小()方法來獲取它的大小。

return IterableUtils.size(data);

4.2。 Iterables#size()

同樣, Google Guava庫還在Iterables類中提供了一組靜態實用程序方法,以對Iterable實例進行操作。

在開始之前,我們需要從Maven Central導入最新的依賴項:

<dependency>

    <groupId>com.google.guava</groupId>

    <artifactId>guava</artifactId>

    <version>25.0</version>

 </dependency>

Iterables類上調用static size()方法可為我們提供元素數量。

return Iterables.size(data);

在底層, IterableUtilsIterables都使用3.1和3.2中描述的方法的組合來確定大小。

5.結論

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

本文的源代碼和相關測試用例可在GitHub上找到