You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:09:02