从集合中比较键后,从映射中移除条目。

huangapple go评论76阅读模式
英文:

Remove entries from Map after comparing keys from a Set

问题

我有一个 Map<Long, String> 和一个 Set<Long>

假设,

Map<Long, String> mapA
Set<Long> setB

我想要从 mapA 中删除那些键不在 setB 中的条目。

并且我希望打印出所有已从 mapA 中删除的条目的日志。

目前我正在使用迭代器。

for (Iterator<Map.Entry<Long, String>> iterator = mapA.entrySet().iterator();
     iterator.hasNext(); ) {

    Map.Entry<Long, String> entry = iterator.next();
    if (!setB.contains(entry.getKey())) {

        LOGGER.error(entry.getKey() + " does not exist");

        // 从 map 中移除。
        iterator.remove();
    }
}

如何在 Java 8 中更简洁地实现这个功能呢?

英文:

I've one Map&lt;Long, String&gt; & one Set&lt;Long&gt;.

Say,

Map&lt;Long, String&gt; mapA
Set&lt;Long&gt; setB

I want to remove those entries from mapA, whose keys are not in setB.

Also I want to print log for all the entries which have been removed from mapA.

Currently I'm using iterator.

for (Iterator&lt;Map.Entry&lt;Long, String&gt;&gt; iterator = mapA.entrySet().iterator();
     iterator.hasNext(); ) {

    Map.Entry&lt;Long, String&gt; entry = iterator.next();
    if (!setB.contains(entry.getKey())) {
        
        LOGGER.error(entry.getKey() + &quot; does not exist&quot;);

        // Removing from map.
        iterator.remove();
    }
}

How can I do it more concisely using Java8?

答案1

得分: 2

你可以像这样使用流:

mapA.entrySet().removeIf(e -> {
    if (setB.contains(e.getKey())) {
        return true;
    }
    LOGGER.error(e.getKey() + " 不存在");
    return false;
});

或者更好的是,如果你不需要值,可以调用keySet:

mapA.keySet().removeIf(k -> {
    if (setB.contains(k)) {
        return true;
    }
    LOGGER.error(k + " 不存在");
    return false;
});
英文:

You can use streams like this;

mapA.entrySet().removeIf(e -&gt; {
    if(setB.contains(e.getKey())){
        return true;
    }
    LOGGER.error(e.getKey() + &quot; does not exist&quot;);
    return false;
});

Or mush better you can call the keySet, if you don't need the values:

mapA.keySet().removeIf(k -&gt; {
    if (setB.contains(k)) {
        return true;
    }
    LOGGER.error(k + &quot; does not exist&quot;);
    return false;
});

huangapple
  • 本文由 发表于 2020年8月18日 03:43:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/63457593.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定