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

Java实践:TreeMap按指定条件删除条目 现有代码报错求修复

现有代码问题梳理

  • 遍历对象错误:你遍历的是刚初始化的空finalMap,没有读取传入的原始map的任何条目,过滤逻辑完全不会执行
  • 方法调用错误:getKey()、getValue()是Map.Entry实例的方法,必须通过遍历得到的Entry对象调用,也就是要写成e.getKey()、e.getValue()
  • 值匹配逻辑错误:equals()是判断字符串整体和目标对象相等,要判断字符串是否包含指定字符,调用String.indexOf(char)即可,返回值大于等于0就代表包含对应字符
  • 并发修改风险:直接在for-each遍历Map的过程中调用map.remove()会触发ConcurrentModificationException并发修改异常,必须用迭代器实现安全删除
  • 不符合返回规则:你直接返回了新建的空map,完全不满足「无删除操作就返回原始传入map」的要求

修正后可运行代码

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class MapFilter {
    public static TreeMap<Integer, String> filterTreeMap(
            TreeMap<Integer, String> map, int keyFilter, char valueFilter) {
        // 先复制原始map的所有数据,避免修改外部传入的原始对象
        TreeMap<Integer, String> processedMap = new TreeMap<>(map);
        // 标记是否有条目被删除
        boolean hasRemoved = false;
        // 用迭代器遍历Entry,支持安全删除
        Iterator<Map.Entry<Integer, String>> iterator = processedMap.entrySet().iterator();
        
        while (iterator.hasNext()) {
            Map.Entry<Integer, String> entry = iterator.next();
            Integer key = entry.getKey();
            String value = entry.getValue();
            // 同时满足两个过滤条件则删除
            if (key % keyFilter == 0 && value.indexOf(valueFilter) >= 0) {
                iterator.remove();
                hasRemoved = true;
            }
        }
        // 无删除返回原始map,有删除返回处理后的map
        return hasRemoved ? processedMap : map;
    }
}

补充说明

TreeMap是基于红黑树实现的有序Map结构,默认按照键的自然顺序排序,遍历、增删的逻辑和其他通用Map的使用没有区别,只是迭代输出的结果会按照key的大小自动排序。

内容的提问来源于stack exchange,提问作者HY2000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:42:04