Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从HashMap中删除条目_Java_Algorithm_Hashmap_Hashset - Fatal编程技术网

在Java中从HashMap中删除条目

在Java中从HashMap中删除条目,java,algorithm,hashmap,hashset,Java,Algorithm,Hashmap,Hashset,所以我有一个hashmap,其中包含键作为字符串,值作为集合中出现的字符串计数的整数 例如,我会有一个如下的hashMap Key Value abcd 4 (meaning there are 4 duplicate strings of abcd in my Set defined someplace) ----- 13 b-b- 7 and so on.. 现在我要做的是从HashMap中删除所有空字符串条目。因此,在上面的

所以我有一个hashmap,其中包含键作为字符串,值作为集合中出现的字符串计数的整数

例如,我会有一个如下的hashMap

    Key    Value
    abcd    4     (meaning there are 4 duplicate strings of abcd in my Set defined someplace)
    -----   13
    b-b-    7

and so on..
现在我要做的是从HashMap中删除所有空字符串条目。因此,在上面的示例中,我希望删除所有值为13的空字符串。所以我得到的HashMap是

Key    Value
abcd    4   
b-b-    7
这是我的代码,尝试做同样的事情。generateFeedbackMap()是返回HashMap的函数,StringIterator是我定义的一个类,它遍历字符串的每个字符

for(String key : generateFeedbackMap().keySet()) {
    StringIterator it = new StringIterator(key);
    int counter = 0;
    while(it.hasNext()){
        String nextChar = it.next();
        if(nextChar.equals("-")){
            counter++;
        }
        Iterator<Map.Entry<String, Integer>> mapIterator = generateFeedbackMap().entrySet().iterator();
        if(counter >= key.length()){

            while(mapIterator.hasNext()){
                Map.Entry<String, Integer> entry = mapIterator.next();
                if(entry.getKey().equals(key)){
                    mapIterator.remove();
                }
            }
        }
    }
}
for(字符串键:generateFeedbackMap().keySet()){
StringIterator it=新StringIterator(键);
int计数器=0;
while(it.hasNext()){
字符串nextChar=it.next();
if(nextChar.equals(“-”){
计数器++;
}
迭代器mapIterator=generateFeedbackMap().entrySet().Iterator();
如果(计数器>=key.length()){
while(mapIterator.hasNext()){
Map.Entry=mapIterator.next();
if(entry.getKey().equals(key)){
mapIterator.remove();
}
}
}
}
}

因此,只要我找到一个“-”字符,我就递增计数器。当计数器等于我的键字符串长度(这意味着它是一个空字符串)时,我使用映射迭代器将其删除,但这不会从映射中删除条目。我做错了什么?

好了,伙计们,我想我找到了解决办法。我只是将所有当前条目从oldMap复制到一个新定义的HashMap,该HashMap的键中至少包含一个字母。因此,基本上我摆脱了所有的删除和对字符串的迭代,只使用另一个HashMap,如下所示

    Map<String, Integer> HelpfulMap = new HashMap<String,Integer>();
    for(String key : generateFeedbackMap().keySet())    {             
        StringIterator it = new StringIterator(key);
        while(it.hasNext()){
           String nextChar = it.next();
           if(!nextChar.equals("-")){
              HelpfulMap.put(key, generateFeedbackMap().get(key));
           }
        }
    }
Map HelpfulMap=newhashmap();
对于(字符串键:generateFeedbackMap().keySet()){
StringIterator it=新StringIterator(键);
while(it.hasNext()){
字符串nextChar=it.next();
如果(!nextChar.equals(“-”){
put(key,generateFeedbackMap().get(key));
}
}
}
我不知道我以前在做什么。我冲了个好澡,想出了这个主意,它成功了。我喜欢编程

感谢大家的投入

generateFeedbackMap()
使您听起来像是在获取基础映射的副本,在这种情况下,从副本中删除密钥不会影响基础映射。如果你真的得到了地图,那么你应该重命名你的方法

不管怎样,下面的代码将与原始代码相同(但仅从副本中删除)


你为什么有这些“-”字?你为什么不在把它们放进你的hashmap之前忽略它们呢?实际上这是我正在制作的一个刽子手游戏的一部分。我需要一个初始正常模式下的空字符串,但我目前正在另一个模式下工作,我想从HashMap中删除所有空字符串您有一个带有一堆----的条目,还是有多个带有----s的条目?是否要删除任何仅为-?我有多个条目。例如,我会有10个--s条目,或者我会有56个k--o条目,或者我会有79个没有任何字母的字符串条目,比如-----我正在尝试删除这些字符串的所有79个条目,而没有任何字母为什么不仅仅是
if(key.matches(“^-+$”)
?这似乎有点低效:1。多次调用
generateFeedbackMap()
,2。多个
put
s如果键有多个非破折号,3。创建新地图,而不是从旧地图中删除。但是如果它完成了任务…是的,看起来像但是如果你能帮我找到一个更好的解决方案,我会非常感激!
Map<String,Integer> feedbackMap = generateFeedbackMap();
for ( String key : feedbackMap.keySet() ) {
    if ( key.matches("-+") ) {
        feedbackMap.remove(key);
    }
}
Map<String,Integer> helpfulMap = new HashMap<>();
for ( Map.Entry<String,Integer> entry : generateFeedbackMap().entrySet() ) {
    if ( ! entry.getKey().matches("-+") ) {
        helpfulMap.put(entry.getKey(),entry.getValue());
    }
}