Bara en referens för framtida besökare Anta att vi har en array som heter foo
som innehåller 10 artiklar. Vad händer om vi försöker iterera med följande kod?:
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
Svaret är en IndexOutOfBoundsException
Anledningen är enkel. Som sagt tidigare foo
innehåller 10 element vilket betyder att du kan komma åt dem med foo[0] to foo[9]
Eftersom arrayindexering börjar från 0 foo[9]
innehåller det sista elementet i din array (det 10:e elementet)`
Vad händer dock i for
slinga?
När du itererar kontrollerar du alltid i<=foo.length
för att fortsätta. Problemet är att när värdet på i
är 9 uttrycket i<=foo.length(which means i<=10)
utvärderas till true
.Det betyder att for
loop kommer att köras för en sista gång. När detta händer i din loop kommer du att försöka komma åt foo[10]
som inte existerar och därav IndexOutOfBoundsException
Så kom ihåg att när du vill iterera över en array alltid använd i<foo.length
Så som du också kom på det är lösningen på ditt problem denna:
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);
}