在Java中从HashMap中删除条目
所以我有一个hashmap,其中包含键作为字符串,值作为集合中出现的字符串计数的整数 例如,我会有一个如下的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中删除所有空字符串条目。因此,在上面的
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());
}
}