Juste une référence pour les futurs visiteurs Supposons que nous ayons un tableau appelé foo
qui contient 10 éléments. Que se passe-t-il si nous essayons d'itérer en utilisant le code suivant ? :
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
La réponse est une IndexOutOfBoundsException
La raison est simple.Comme dit précédemment foo
contient 10 éléments, ce qui signifie que vous pouvez y accéder en utilisant foo[0] to foo[9]
Puisque l'indexation du tableau commence à 0 foo[9]
contient le dernier élément de votre tableau (le 10ème élément)`
Que se passe-t-il cependant dans le for
boucle ?
Lorsque vous itérez, vous vérifiez toujours i<=foo.length
pour continuer.Le problème est que lorsque la valeur de i
vaut 9 l'expression i<=foo.length(which means i<=10)
évalue à true
.Cela signifie que le for
la boucle s'exécutera une dernière fois. Lorsque cela se produira dans votre boucle, vous essaierez d'accéder à foo[10]
qui n'existe pas et donc IndexOutOfBoundsException
Alors rappelez-vous que lorsque vous voulez itérer sur un tableau, vous toujours utilisez i<foo.length
Donc, comme vous l'avez également compris, la solution à votre problème est la suivante :
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);
}