一、问题描述:
直接上错误实例代码:
private void remove(List<数据对象> tempData) { if (ArrayUtils.isNotEmpty(tempData)) { for (int i = 0; i < 待删除的list集合.size(); i++) { for (int j = 0; j < tempData.size(); j++) { if (待删除的list集合.get(i).getId().equals(tempData.get(j).getId())) { tempData.remove(j); totalNum--; } } } } }
错误说明:通过index遍历List删除元素,部分元素实际未被遍历,导致功能异常
正确的代码:
private void remove(List<数据对象> tempData) { if (ArrayUtils.isEmpty(tempData)) { return; } tempData.removeIf(item -> 待删除的list集合 .stream() .anyMatch(delItem -> StringUtils.isEqual(delItem.getId(), item.getId()))); }
问题总结:
遍历集合的过程中应避免对集合对象的大小进行修改,否则功能会有异常;如果对内容进行修改,可能还会触发fail-fast,抛出异常。推荐使用Iterator或java8中的filter/removeIf等方法进行操作。