Получение размера итерируемого в Java

Получение размера итерируемого в Java

1. обзор

В этом кратком руководстве мы узнаем о различных способах получения размераIterable в Java.

2. Итерируемый и Итератор

Iterable - один из основных интерфейсов классов коллекции в Java.

ИнтерфейсCollection расширяетIterable, и, следовательно, все дочерние классыCollection также реализуютIterable.

Iterable имеет только один метод, который производитhttps://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html:

public interface Iterable {
    public Iterator iterator();
}

Затем этотIterator можно использовать для перебора элементов вIterable.

3. Итерируемый размер с использованием Core Java

3.1. for-each цикл

Все классы, реализующиеIterable, имеют право на циклfor-each в Java.

Это позволяет нам перебирать элементы в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, мы можем создатьStream изIterable.

Затем объект потока можно использовать для получения количества элементов вIterable.

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

4. Итерируемый размер с использованием сторонних библиотек

4.1. IterableUtils#size()с

В библиотекеApache Commons Collections есть отличный классIterableUtils, который предоставляет статические служебные методы для экземпляровIterable.

Прежде чем мы начнем, нам нужно импортировать последние зависимости изMaven Central:


    org.apache.commons
    commons-collections4
    4.1

Мы можем вызвать методsize() дляIterableUtils для объектаIterable, чтобы получить его размер.

return IterableUtils.size(data);

4.2. Iterables#size()с

Точно так же библиотекаGoogle Guava также предоставляет набор статических служебных методов в своем классеIterables для работы с экземплярамиIterable.

Прежде чем мы начнем, нам нужно импортировать последние зависимости изMaven Central:


    com.google.guava
    guava
    25.0

Вызов статического методаsize() в классеIterables дает нам количество элементов.

return Iterables.size(data);

Под капотом какIterableUtils, так иIterables используют комбинацию подходов, описанных в 3.1 и 3.2 для определения размера.

5. Заключение

В этой статье мы рассмотрели различные способы получения размераIterable в Java.

Исходный код этой статьи и соответствующие тестовые примеры доступныover on GitHub.