Apenas uma referência para futuros visitantes Suponha que tenhamos um array chamado
foo
que contém 10 itens. O que acontece se tentarmos iterar usando o seguinte código?:for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
A resposta é um
IndexOutOfBoundsException
A razão é simples. Como dito antes foo
contém 10 elementos, o que significa que você pode acessá-los usando foo[0] to foo[9]
Como a indexação de array começa em 0 foo[9]
contém o último elemento em sua matriz (o 10º elemento)` O que acontece no
for
ciclo? Ao iterar, você sempre verifica
i<=foo.length
para continuar. O problema é que quando o valor de i
é 9 a expressão i<=foo.length(which means i<=10)
avalia como true
.Isso significa que o for
loop será executado pela última vez. Quando isso acontecer em seu loop, você tentará acessar foo[10]
que não existe e, portanto, o IndexOutOfBoundsException
Portanto, lembre-se de que, quando você deseja iterar em uma matriz, sempre use
i<foo.length
Então, como você também descobriu, a solução para o seu problema é esta:
for(int i=0; i< field.length; i++){
String[] field = allFields.split(",");
String field1 = "$"+field[i];
BsonField includeFields = Accumulators.first(field[i], field1);
includeList.add(includeFields);
}