删除数组中的某些元素,需要注意删除后,整个数据的大小会变化。如果以元素下标删除就会出错。
错误示范:
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会变小。那么我重后遍历并删除,这样就可以了吧
privateJSONArray 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);
}
}returnproductList;
}
还有一种方式就是把List数组变成将数组转换为Iterator<> 并且应用Iterator的删除方法,Iterator.remove
参考之前
https://www.cnblogs.com/zhongzheng123/p/5820755.html