最好的方式:iterator
// 系统配置的应用集合
List<ApplicationInfo> applicationInfos = new ArrayList<ApplicationInfo>();
// 移除已经存在了的应用集合
Iterator<ApplicationInfo> iterator = applicationInfos.iterator();
while (iterator.hasNext()) {
ApplicationInfo applicationInfo = iterator.next();
List<CertificationCharging> certificationChargings = certificationChargingService
.selectListByAppId(applicationInfo.getId(), null);
if (null != certificationChargings && certificationChargings.size() > 0) {
iterator.remove();
}
}
其他几种方式不行的原因
// 移除已经存在了的应用集合
//不可行,在删除元素之后,遍历下一个元素会出现异常
// for (ApplicationInfo applicationInfo : applicationInfos) {
// List<CertificationCharging> certificationChargings = certificationChargingService
// .selectListByAppId(applicationInfo.getId(), null);
// if (null != certificationChargings && certificationChargings.size() > 0) {
// applicationInfos.remove(applicationInfo);
// }
// }
//不可行,在删除元素之后,size变小了,i++之后,会跳过被删除的元素的下一个元素的判断
// for (int i = 0; i < applicationInfos.size(); i++) {
// List<CertificationCharging> certificationChargings = certificationChargingService
// .selectListByAppId(applicationInfos.get(i).getId(), null);
// if (null != certificationChargings && certificationChargings.size() > 0) {
// applicationInfos.remove(i);
// }
// }
下面这种方式可行,但是不太好
// 需要删除的集合
//List<ApplicationInfo> removeList = new ArrayList<ApplicationInfo>();
// for (int i = 0; i < applicationInfos.size(); i++) {
// List<CertificationCharging> certificationChargings = certificationChargingService
// .selectListByAppId(applicationInfos.get(i).getId(), null);
// if (null != certificationChargings && certificationChargings.size() > 0) {
// removeList.add(applicationInfos.get(i));
// }
// }
// for (int i = 0; i < removeList.size(); i++) {
// applicationInfos.remove(removeList.get(i));
// }