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

1.概要

このクイックチュートリアルでは、https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html[ Iterable ]のサイズを取得するためのさまざまな方法について説明します。 Javaで。

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<T> {
    public Iterator<T> iterator();
}

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

3.コアJavaを使った反復可能サイズ

3.1. for-each ループ

  • Iterable を実装するすべてのクラスは、Javaのhttps://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html[ for-each ]ループに適しています。**

これにより、サイズを取得するためにカウンタをインクリメントしながら、 Iterable 内の要素をループ処理できます。

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

3.2. Collection.size()

  • ほとんどの場合、 Iterable は____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からhttps://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html[ Stream__]を作成できます。

その後、ストリームオブジェクトを使用して Iterable の要素数を取得できます。

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

4.他社製ライブラリを使用した反復可能サイズ

4.1. IterableUtils#size()

  • Apache Commons Collections ライブラリには、 Iterable インスタンス用の静的ユーティリティメソッドを提供する素晴らしいhttps://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/IterableUtils.html[ IterableUtils ]クラスがあります。**

開始する前に、https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.apache.commons%22%20AND%20a%3A%22commonsから最新の依存関係をインポートする必要があります。 -collections4%22[メイヴン中央]:

<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 ライブラリでも、https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Iterables.html#sizeに静的ユーティリティメソッドのコレクションが用意されています(java.lang.Iterable) Iterable インスタンスを操作するクラス。**

始める前に、https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.google.guava%22%20AND%20a%3A%22guavaから最新の依存関係をインポートする必要があります。 %22[メイヴン中央]:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>25.0</version>
</dependency>

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

return Iterables.size(data);

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

5.まとめ

この記事では、Javaで Iterable のサイズを取得するさまざまな方法を調べました。

この記事のソースコードと関連するテストケースはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[GitHubで利用可能]です。