Получение размера итерируемого в 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.