首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在删除和更新集合时遍历HashMap

在删除和更新集合时遍历HashMap
EN

Stack Overflow用户
提问于 2022-06-18 16:02:08
回答 2查看 46关注 0票数 1

我有一个计数地图,在那里,我跟踪字符串中的字符数。我想迭代这个映射,减少当前访问的字符计数,并在它达到零时删除它。

如何在Java中做到这一点?

代码语言:javascript
复制
HashMap<Character, Integer> characterCount = new HashMap<>();
characterCount.put('a', 2);
characterCount.put('b', 1);
characterCount.put('c', 1);

Iterator<Map.Entry<Character, Integer>> iterator = characterCount.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry<Character, Integer> entry = iterator.next();

    // Decrement the chosen character from the map
    if (entry.getValue() == 1) {
        iterator.remove();
    } else {
        characterCount.put(entry.getKey(), entry.getValue() - 1);
    }

    // Call some logic the relies on the map with the remaining character count.
    // I want the characterCount.size() to return zero when there is no character with count > 0
    doSomeLogic(characterCount);

    // Restore the character to the map
    characterCount.put(entry.getKey(), entry.getValue());
}

上面的代码会产生一个ConcurrentModificationException

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-18 16:05:33

因为Map#entrySet返回映射的视图,所以直接设置Entry的值来更新它。

代码语言:javascript
复制
if (entry.getValue() == 1) {
    iterator.remove();
} else {
    entry.setValue(entry.getValue() - 1);
}
票数 3
EN

Stack Overflow用户

发布于 2022-06-18 16:25:25

这里有一条路。Map.computeIfPresent将在条目成为null时删除它。如果当前为null (即将减少),则使用三元运算符可以减少值,也可以用1替换。

代码语言:javascript
复制
Map<Character, Integer> map = new HashMap<>();
map.put('a', 2);
map.put('b', 1);
map.put('c', 1);

map.computeIfPresent('c', (k,v)-> v == 1 ? null : v-1);
map.computeIfPresent('a', (k,v)-> v == 1 ? null : v-1);

System.out.println(map);

版画

代码语言:javascript
复制
{a=1, b=1}

因此,这里是如何为您工作,替换您的迭代器和while循环。

代码语言:javascript
复制
for (char ch : characterCount.keySet()) {
      characterCount.computeIfPresent(ch, (k,v)-> v == 1 ? null : v-1);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72670728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档