1. Обзор
В этом кратком руководстве мы узнаем о различных способах, с помощью которых мы можем получить размер Iterable в Java.
2. Итерируемый и итератор
Итерируемый является одним из основных интерфейсов классов коллекций в Java.
Интерфейс Collection расширяет Iterable и, следовательно, все дочерние классы Collection также реализуют Iterable .
Iterable имеет только один метод, который создает Итератор :
public interface Iterable{ public Iterator iterator(); }
Этот Итератор затем можно использовать для перебора элементов в Iterable .
3. Итерационный Размер С Использованием Ядра Java
3.1. для каждого цикла
Все классы, которые реализуют Итерируемый имеют право на для-каждого цикл в Java.
Это позволяет нам перебирать элементы в Iterable , увеличивая счетчик, чтобы получить его размер:
int counter = 0; for (Object i : data) { counter++; } return counter;
3.2. Размер коллекции()
В большинстве случаев Итерируемый будет примером Коллекция, например, Список или Набор .
В таких случаях мы можем проверить тип 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. Поток.Количество()
Если мы используем Java 8, мы можем создать Течение из Повторяемость.
Затем объект stream можно использовать для получения количества элементов в Iterable .
return StreamSupport.stream(data.spliterator(), false).count();
4. Итерационный Размер С Использованием Сторонних Библиотек
4.1. Размер IterableUtils#()
То Коллекции Apache Commons в библиотеке есть хороший IterableUtils класс, предоставляющий статические служебные методы для Итерируемый экземпляры.
Прежде чем мы начнем, нам нужно импортировать последние зависимости из Maven Central :
org.apache.commons commons-collections4 4.1
Мы можем вызвать size() метод IterableUtils на объекте Iterable , чтобы получить его размер.
return IterableUtils.size(data);
4.2. Размер итераций#()
Аналогично, Гугл Гуава библиотека также предоставляет коллекцию статических служебных методов в своем Итерабельные класс для работы Итерируемый экземпляры.
Прежде чем мы начнем, нам нужно импортировать последние зависимости из Maven Central :
com.google.guava guava 25.0
Вызов статического метода size() в классе Iterables дает нам количество элементов.
return Iterables.size(data);
Под капотом оба IterableUtils и Iterables используют комбинацию подходов, описанных в 3.1 и 3.2, для определения размера.
5. Заключение
В этой статье мы рассмотрели различные способы получения размера Iterable в Java.
Исходный код этой статьи и соответствующие тестовые примеры доступны на GitHub .