Java如何查找并删除N层嵌套Son列表中type属性为1的元素
问题根因
你原来的实现存在两个核心问题:
- 遍历集合时直接调用
remove方法删除元素,会触发ConcurrentModificationException并发修改异常,无法正常执行删除逻辑 - 只处理了Root下第一层的Son列表,没有递归遍历深层嵌套的Son节点,无法命中深层的type=1元素
实现方案
用递归+List.removeIf(Java 8及以上内置的安全删除方法)即可实现任意嵌套层级的匹配删除,逻辑如下:
首先假设你的Son类包含获取子Son列表的getSons()方法,实现递归工具方法:
// 递归删除所有type=1的Son元素 private void removeInvalidSon(List<Son> sonList) { // 空列表直接返回,避免空指针 if (sonList == null || sonList.isEmpty()) { return; } // 先递归处理所有子节点的嵌套列表,先清除深层的匹配元素 for (Son son : sonList) { removeInvalidSon(son.getSons()); } // 安全删除当前层所有type=1的元素,无需手动遍历 sonList.removeIf(son -> son.getType() == 1); }
调用时直接传入Root对象的第一层Son列表即可:
removeInvalidSon(root.getSons());
逻辑说明
- 采用深度优先的递归逻辑,无论嵌套多少层的Son节点都会被遍历到
- 先处理子层再处理当前层,保证所有层级的匹配元素都能被清除
removeIf是JDK提供的安全批量删除方法,底层用迭代器实现,不会触发并发修改异常- 如果type=1的元素自身还有嵌套子元素,会随着父元素一起被删除,符合需求
内容的提问来源于stack exchange,提问作者Daniel Max
相关产品推荐
相关产品推荐

