微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从番石榴中删除googleMultimap永远不会删除密钥本身为什么?怎么做?

如何解决从番石榴中删除googleMultimap永远不会删除密钥本身为什么?怎么做?

| 我使用的是来自番石榴的Google收藏库,我认为是最新版本。 我发现,一旦我从映射中删除了给定K值的最后(K,V)对,该映射仍然包含K​​的条目,其中V是一个空集合。 我希望地图不包含此项。为什么我不能删除它?或者,如果可以,怎么办? 我可能错过了一些简单的事情。这是一个代码示例。谢谢。
    // A plain ordinary map.
    Map<Integer,Integer> hm = new HashMap<Integer,Integer>();
    hm.put(1,2);
    hm.remove(1);
    // Value of key 1 in HashMap: null
    System.out.println(\"Value of key 1 in HashMap: \" + hm.get(1));

    // A list multimap.
    ListMultimap<Integer,Integer> lmm = ArrayListMultimap.<Integer,Integer> create();
    lmm.put(1,2);
    lmm.remove(1,2);
    // Value of key 1 in ArrayListMultiMap: []
    System.out.println(\"Value of key 1 in ArrayListMultiMap: \" + lmm.get(1));

    // A set multimap.
    SetMultimap<Integer,Integer> smm = HashMultimap.<Integer,Integer> create();
    smm.put(1,2);
    smm.remove(1,2);
    // Value of key 1 in HashMultimap: []
    System.out.println(\"Value of key 1 in HashMultimap: \" + smm.get(1));
    

解决方法

        实际上,当您删除多重映射中某个键的最后一个值时,该键将从映射中移除。 例如查看\'containsKey \'的行为
System.out.println(\"ListMultimap contains key 1? \" + lmm.containsKey(1));
但是,当您从multimap获取值时,如果没有与键关联的集合,它将返回一个空集合,请参见AbstractMultimap中的get的实现:
/**
 * {@inheritDoc}
 *
 * <p>The returned collection is not serializable.
 */
@Override
public Collection<V> get(@Nullable K key) {
  Collection<V> collection = map.get(key);
  if (collection == null) {
    collection = createCollection(key);
  }
  return wrapCollection(key,collection);
}
    ,        要从
Multimap
中完全删除基础条目,您需要使用
Map
视图:
multimap.asMap().remove(key);
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。