Javaでイテラブルのサイズを取得する

Javaでイテラブルのサイズを取得する

1. 概要

このクイックチュートリアルでは、JavaでIterableのサイズを取得するさまざまな方法について学習します。

2. 反復可能および反復子

Iterableは、Javaのコレクションクラスの主要なインターフェイスの1つです。

CollectionインターフェースはIterableを拡張するため、Collectionのすべての子クラスもIterableを実装します。

Iterableには、https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html:を生成するメソッドが1つだけあります。

public interface Iterable {
    public Iterator iterator();
}

次に、このIteratorを使用して、Iterable内の要素を反復処理できます。

3. Core 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は、ListSetなどのCollection, のインスタンスになります。

このような場合、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クラスがあります。

開始する前に、Maven Centralから最新の依存関係をインポートする必要があります。


    org.apache.commons
    commons-collections4
    4.1

IterableオブジェクトでIterableUtilssize()メソッドを呼び出して、そのサイズを取得できます。

return IterableUtils.size(data);

4.2. Iterables#size()

同様に、Google Guavaライブラリは、Iterableインスタンスを操作するためのIterablesクラスの静的ユーティリティメソッドのコレクションも提供します。

開始する前に、Maven Centralから最新の依存関係をインポートする必要があります。


    com.google.guava
    guava
    25.0

Iterablesクラスで静的なsize()メソッドを呼び出すと、要素の数がわかります。

return Iterables.size(data);

内部的には、IterableUtilsIterablesの両方が、3.1と3.2で説明されているアプローチの組み合わせを使用してサイズを決定します。

5. 結論

この記事では、JavaでIterableのサイズを取得するさまざまな方法について説明しました。

この記事のソースコードと関連するテストケースは、over on GitHubで入手できます。