删除树图中具有条件的条目

Remove entries with conditions in a treemap

我正在做 Java 练习,问题要求我采用提供的 TreeMap,删除键是 keyFilter 的倍数且值包含 valueFilter 字符的条目,然后 returns 生成的 TreeMap。如果应用键和值过滤器不会删除任何条目,则 提供的地图必须归还。

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) {
        
        TreeMap<Integer, String> finalMap = new TreeMap<Integer, String>();
        
        for(Map.Entry<Integer, String> e: finalMap.entrySet()){
            if(getKey() % keyFilter == 0 && getValue().equals(valueFilter){
                map.remove(getKey());
            }
        }
        return finalMap;
    }
}

这是我目前的代码。我不知道树图是如何工作的,也不知道如何比较包含 valueFilter 字符的值。我的代码有错误。你能帮忙的话,我会很高兴。谢谢!

这样就可以了,代码中有解释:

public static TreeMap<Integer, String> filterTreeMap(TreeMap<Integer, String> map, int keyFilter, char valueFilter) {
    // <--- your finalMap was always empty, you have to fill values in it
    // so initialize it with your parameter map
    TreeMap<Integer, String> finalMap = new TreeMap<Integer, String>(map); 

    for(Map.Entry<Integer, String> e: map.entrySet()){
        if(e.getKey() % keyFilter == 0 && e.getValue().indexOf(valueFilter) >= 0){ 
            // <--- to test if a string contains a char, use index of
            finalMap.remove(e.getKey());
        }
    }
    return finalMap;
}

public static void main(String[] args) {
    TreeMap<Integer, String> map = new TreeMap<>();
    map.put(1, "abcdef");
    map.put(2, "fghijk");
    map.put(4, "fghijk");
    map.put(3, "lmnop");

    System.out.println(filterTreeMap(map, 2, 'f')); // output: {1=abcdef, 3=lmnop}
    System.out.println(filterTreeMap(map, 3, 'a')); // output: {1=abcdef, 2=fghijk, 3=lmnop, 4=fghijk}
}