Solo una referencia para futuros visitantes Supongamos que tenemos una matriz llamada foo
que contiene 10 elementos. ¿Qué sucede si intentamos iterar usando el siguiente código?:
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
La respuesta es una IndexOutOfBoundsException
La razón es simple. Como se dijo antes foo
contiene 10 elementos, lo que significa que puede acceder a ellos usando foo[0] to foo[9]
Dado que la indexación de matrices comienza desde 0 foo[9]
contiene el último elemento de su matriz (el décimo elemento)`
Sin embargo, ¿qué sucede en el for
? bucle?
A medida que itera, siempre verifica i<=foo.length
para continuar. El problema es que cuando el valor de i
es 9 la expresión i<=foo.length(which means i<=10)
se evalúa como true
.Eso significa que el for
el bucle se ejecutará por última vez. Cuando esto suceda en su bucle, intentará acceder a foo[10]
que no existe y por lo tanto la IndexOutOfBoundsException
Así que recuerda que cuando quieras iterar sobre una matriz, siempre usa i<foo.length
Entonces, como usted también descubrió, la solución a su problema es 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);
}