如何检查 ArrayList 中是否存在索引 + 1 以避免 IndexOutOfBoundsException
How to check if index + 1 is present in ArrayList to avoid IndexOutOfBoundsException
一个列表包含多个列表。从这些列表中,总是一个接一个地检查 2 个列表,并从彼此中减去值。然后将结果保存在新列表中。
代码如下所示:
List<List<AccountlinevaluesEntity>> a_l_v_eList = new ArrayList<>();
List<List<AccountlinevaluesEntity>> finalList = new ArrayList<>();
//creates multiple ArrayLists in List, based on numbers of monthList
for (int i = 0; i < monthList.size(); i++) {
a_l_v_eList.add(new ArrayList<>());
finalList.add(new ArrayList<>());
}
//splits original List and seperates lists
for (AccountlinevaluesEntity a_l_v_E : alveList) {
for (int k = 0; k < a_l_v_eList.size(); k++) {
for (int j = 0; j < monthList.size(); j++) {
if (j == k) {
if (a_l_v_E.getPeriod().equals(String.valueOf(monthList.get(j)))) {
a_l_v_eList.get(j).add(a_l_v_E);
}
}
}
}
}
List<AccountlinevaluesEntity> tempList;
for (int i = 0; i < a_l_v_eList.size(); i++) {
List<AccountlinevaluesEntity> firstMonth = a_l_v_eList.get(i);
tempList = a_l_v_eList.get(i + 1);
for (int j = 0; j < firstMonth.size(); j++) {
AccountlinevaluesEntity firstMonthElement = firstMonth.get(j);
for (AccountlinevaluesEntity nextMonthElementTemp : tempList) {
if (firstMonthElement.getAccountNumber() == nextMonthElementTemp.getAccountNumber()) {
nextMonthElementTemp.setAmount(subtractAmount(firstMonthElement.getAmount(), nextMonthElementTemp.getAmount()));
finalList.get(i).add(nextMonthElementTemp);
break;
}
}
}
}
就其本身而言,代码先做他应该做的。
但从逻辑上讲,它最终在这一行中爆炸:
tempList = a_l_v_eList.get(i + 1);
谁能告诉我如何检查索引 + 1 是否存在?
我也愿意进行一般代码改进。
更改此行
for (int i = 0; i < a_l_v_eList.size(); i++) {
到
for (int i = 0; i < a_l_v_eList.size()-1; i++) {
这样,一旦没有下一个元素可用,您将结束循环。
你可以直接勾选if(list.size() > index + 1)
一个列表包含多个列表。从这些列表中,总是一个接一个地检查 2 个列表,并从彼此中减去值。然后将结果保存在新列表中。
代码如下所示:
List<List<AccountlinevaluesEntity>> a_l_v_eList = new ArrayList<>();
List<List<AccountlinevaluesEntity>> finalList = new ArrayList<>();
//creates multiple ArrayLists in List, based on numbers of monthList
for (int i = 0; i < monthList.size(); i++) {
a_l_v_eList.add(new ArrayList<>());
finalList.add(new ArrayList<>());
}
//splits original List and seperates lists
for (AccountlinevaluesEntity a_l_v_E : alveList) {
for (int k = 0; k < a_l_v_eList.size(); k++) {
for (int j = 0; j < monthList.size(); j++) {
if (j == k) {
if (a_l_v_E.getPeriod().equals(String.valueOf(monthList.get(j)))) {
a_l_v_eList.get(j).add(a_l_v_E);
}
}
}
}
}
List<AccountlinevaluesEntity> tempList;
for (int i = 0; i < a_l_v_eList.size(); i++) {
List<AccountlinevaluesEntity> firstMonth = a_l_v_eList.get(i);
tempList = a_l_v_eList.get(i + 1);
for (int j = 0; j < firstMonth.size(); j++) {
AccountlinevaluesEntity firstMonthElement = firstMonth.get(j);
for (AccountlinevaluesEntity nextMonthElementTemp : tempList) {
if (firstMonthElement.getAccountNumber() == nextMonthElementTemp.getAccountNumber()) {
nextMonthElementTemp.setAmount(subtractAmount(firstMonthElement.getAmount(), nextMonthElementTemp.getAmount()));
finalList.get(i).add(nextMonthElementTemp);
break;
}
}
}
}
就其本身而言,代码先做他应该做的。
但从逻辑上讲,它最终在这一行中爆炸:
tempList = a_l_v_eList.get(i + 1);
谁能告诉我如何检查索引 + 1 是否存在? 我也愿意进行一般代码改进。
更改此行
for (int i = 0; i < a_l_v_eList.size(); i++) {
到
for (int i = 0; i < a_l_v_eList.size()-1; i++) {
这样,一旦没有下一个元素可用,您将结束循环。
你可以直接勾选if(list.size() > index + 1)