Die Größe einer Iterable in Java ermitteln

Abrufen der Größe einer Iterable in Java

1. Überblick

In diesem kurzen Tutorial lernen wir die verschiedenen Möglichkeiten kennen, wie wir die Größe einesIterablein Java ermitteln können.

2. Iterable und Iterator

Iterable ist eine der Hauptschnittstellen der Auflistungsklassen in Java.

DieCollection-Schnittstelle erweitertIterable und daher implementieren alle untergeordneten Klassen vonCollection auchIterable.

Iterable hat nur eine Methode, diehttps://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html: erzeugt

public interface Iterable {
    public Iterator iterator();
}

DieseIterator können dann verwendet werden, um über die Elemente inIterable zu iterieren.

3. Iterierbare Größe mit Core Java

3.1. for-each Schleife

Alle Klassen, dieIterable implementieren, sind für diefor-each-Schleife in Java berechtigt.

Dies ermöglicht es uns, die Elemente inIterable zu durchlaufen, während ein Zähler inkrementiert wird, um seine Größe zu erhalten:

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

3.2. Collection.size()

In den meisten Fällen istIterable eine Instanz vonCollection, wieList oderSet.

In solchen Fällen können wir den Typ derIterable überprüfen und diesize()-Methode darauf aufrufen, um die Anzahl der Elemente zu ermitteln.

if (data instanceof Collection) {
    return ((Collection) data).size();
}

Der Aufruf vonsize() ist normalerweise viel schneller als das Durchlaufen der gesamten Sammlung.

Hier ist ein Beispiel, das die Kombination der beiden oben genannten Lösungen zeigt:

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()

Wenn wir Java 8 verwenden, können wir ausIterable. einStream erstellen

Das Stream-Objekt kann dann verwendet werden, um die Anzahl der Elemente inIterable zu ermitteln.

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

4. Iterierbare Größe mithilfe von Bibliotheken von Drittanbietern

4.1. IterableUtils#size()

DieApache Commons Collections-Bibliothek hat eine netteIterableUtils-Klasse, die statische Dienstprogrammmethoden fürIterable-Instanzen bereitstellt.

Bevor wir beginnen, müssen wir die neuesten Abhängigkeiten ausMaven Central importieren:


    org.apache.commons
    commons-collections4
    4.1

Wir können diesize()-Methode vonIterableUtils für einIterable-Objekt aufrufen, um seine Größe zu erhalten.

return IterableUtils.size(data);

4.2. Iterables#size()

In ähnlicher Weise bietet die BibliothekGoogle Guavaauch eine Sammlung statischer Dienstprogrammmethoden in der KlasseIterables, mit denenIterable-Instanzen bearbeitet werden können.

Bevor wir beginnen, müssen wir die neuesten Abhängigkeiten ausMaven Central importieren:


    com.google.guava
    guava
    25.0

Wenn Sie die statische Methodesize()für die KlasseIterablesaufrufen, erhalten Sie die Anzahl der Elemente.

return Iterables.size(data);

Unter der Haube verwenden sowohlIterableUtils als auchIterables die in 3.1 und 3.2 beschriebene Kombination von Ansätzen, um die Größe zu bestimmen.

5. Fazit

In diesem Artikel haben wir uns verschiedene Möglichkeiten angesehen, um die Größe einesIterablein Java zu ermitteln.

Der Quellcode für diesen Artikel und die relevanten Testfälle sind inover on GitHub verfügbar.