用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的一個實例,例如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。 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);
在底層, IterableUtils和Iterables都使用3.1和3.2中描述的方法的組合來確定大小。
5.結論
在本文中,我們研究了在Java中獲取Iterable大小的不同方法。
本文的源代碼和相關測試用例可在GitHub上找到。