Obtendo o tamanho de um iterável em Java
1. Visão geral
Neste tutorial rápido, aprenderemos sobre as várias maneiras pelas quais podemos obter o tamanho de umIterable em Java.
2. Iterável e Iterador
Iterable é uma das principais interfaces das classes de coleção em Java.
A interfaceCollection estendeIterable e, portanto, todas as classes filhas deCollection também implementamIterable.
Iterable tem apenas um método que produz umhttps://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html:
public interface Iterable {
public Iterator iterator();
}
EsteIterator pode então ser usado para iterar sobre os elementos emIterable.
3. Tamanho iterável usando Core Java
3.1. loopfor-each
Todas as classes que implementamIterable são elegíveis para o loopfor-each em Java.
Isso nos permite fazer um loop sobre os elementos emIterable enquanto incrementamos um contador para obter seu tamanho:
int counter = 0;
for (Object i : data) {
counter++;
}
return counter;
3.2. Collection.size()
Na maioria dos casos,Iterable será uma instância deCollection, , comoList ouSet.
Nesses casos, podemos verificar o tipo deIterablee chamar o métodosize() nele para obter o número de elementos.
if (data instanceof Collection) {
return ((Collection>) data).size();
}
A chamada parasize() geralmente é muito mais rápida do que iterar por toda a coleção.
Aqui está um exemplo que mostra a combinação das duas soluções acima:
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()
Se estivermos usando Java 8, podemos criar umStream a partir deIterable.
O objeto stream pode então ser usado para obter a contagem de elementos emIterable.
return StreamSupport.stream(data.spliterator(), false).count();
4. Tamanho iterável usando bibliotecas de terceiros
4.1. IterableUtils#size()
A bibliotecaApache Commons Collections tem uma boa classeIterableUtils que fornece métodos utilitários estáticos para instâncias deIterable.
Antes de começar, precisamos importar as dependências mais recentes deMaven Central:
org.apache.commons
commons-collections4
4.1
Podemos invocar o métodosize() deIterableUtils em um objetoIterable para obter seu tamanho.
return IterableUtils.size(data);
4.2. Iterables#size()
Da mesma forma, a bibliotecaGoogle Guava também fornece uma coleção de métodos utilitários estáticos em sua classeIterables para operar em instânciasIterable.
Antes de começar, precisamos importar as dependências mais recentes deMaven Central:
com.google.guava
guava
25.0
Invocar o métodosize() estático na classeIterables nos dá o número de elementos.
return Iterables.size(data);
Sob o capô,IterableUtils eIterables usam a combinação de abordagens descritas em 3.1 e 3.2 para determinar o tamanho.
5. Conclusão
Neste artigo, vimos diferentes maneiras de obter o tamanho de umIterable em Java.
O código-fonte deste artigo e os casos de teste relevantes estão disponíveisover on GitHub.