删除数组中的某些元素,需要注意删除后,整个数据的大小会变化。如果以元素下标删除就会出错。
错误示范:
private JSONArray removeOther(JSONArray productList) {
if (CollectionUtils.isNotEmpty(productList)) {
//数组删除必须防止删除后与边界问题
for (int i = 0; i < productList.size(); i--) {
String riskPageType = productList.getJSONObject(i).getString("riskPageType");
boolean remove = true;
for (String product : productS) {
if (product.equals(riskPageType)) {
remove = false;
break;
}
}
if (remove) {
productList.remove(i);
} else {
//防止前端误解,删除departmentCode
productList.getJSONObject(i).remove("departmentCode");
}
}
}
return productList;
}
那么,我重新new一个数组,将原来的数据复制到新数组中,总可以吧。但是似乎有点浪费内存,大规模数据或者请求的时候就不适合了。换个思路:既然数据index会变小。那么我重后遍历并删除,这样就可以了吧
private JSONArray removeOther(JSONArray productList) { //数组删除必须防止删除后与边界问题 for (int i = 0; i < productList.size(); i--) { String riskPageType = productList.getJSONObject(i).getString("riskPageType"); boolean remove = true; for (String product : productS) { if (product.equals(riskPageType)) { remove = false; break; } } if (remove) { productList.remove(i); } } return productList; }
还有一种方式就是把List数组变成将数组转换为Iterator<> 并且应用Iterator的删除方法,Iterator.remove
参考之前
https://www.cnblogs.com/zhongzheng123/p/5820755.html