Javaでイテラブルのサイズを取得する
1. 概要
このクイックチュートリアルでは、JavaでIterableのサイズを取得するさまざまな方法について学習します。
2. イテレータとイテレータ
Iterable は、Javaのコレクションクラスの主要なインターフェイスの1つです。
CollectionインターフェイスはIterableを拡張するため、Collectionのすべての子クラスもIterableを実装します。
Iterable には、 Iterator :を生成するメソッドが1つだけあります。
public interface Iterable<T> {
public Iterator<T> iterator();
}
このIteratorを使用して、Iterableの要素を反復処理できます。
3. コアJavaを使用した反復可能なサイズ
3.1. for-eachループ
Iterable を実装するすべてのクラスは、Javaのfor-eachループに適格です。
これにより、 Iterable の要素をループしながら、カウンターをインクリメントしてサイズを取得できます。
int counter = 0;
for (Object i : data) {
counter++;
}
return counter;
3.2. Collection.size()
ほとんどの場合、 Iterable は、[X90X] Collection、、たとえばListやSetのインスタンスになります。
このような場合、 Iterable のタイプを確認し、 size()メソッドを呼び出して要素数を取得できます。
if (data instanceof Collection) {
return ((Collection<?>) data).size();
}
size()の呼び出しは、通常、コレクション全体を反復処理するよりもはるかに高速です。
上記の2つのソリューションの組み合わせを示す例を次に示します。
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からStreamを作成できます。
次に、ストリームオブジェクトを使用して、Iterableの要素の数を取得できます。
return StreamSupport.stream(data.spliterator(), false).count();
4. サードパーティのライブラリを使用した反復可能なサイズ
4.1. IterableUtils#size()
Apache Commons Collections ライブラリには、Iterableインスタンスの静的ユーティリティメソッドを提供する優れたIterableUtilsクラスがあります。
開始する前に、 MavenCentralから最新の依存関係をインポートする必要があります。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
IterableオブジェクトでIterableUtilsのsize()メソッドを呼び出して、そのサイズを取得できます。
return IterableUtils.size(data);
4.2. Iterables#size()
同様に、 Google Guava ライブラリは、Iterableインスタンスを操作するためのIterablesクラスの静的ユーティリティメソッドのコレクションも提供します。
開始する前に、 MavenCentralから最新の依存関係をインポートする必要があります。
<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でから入手できます。