新的集合之Multimap


声明:本文转载自https://my.oschina.net/qixiaobo025/blog/1612570,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

背景

想必一大部分同学都实现过Map<V,List<T>>这样的代码吧

确实看起来很多很笨重 最主要这样的代码太多

问题

我们对于这种数据用起来很不爽的是如果我们关注的是T类型但是我们要时刻保持警惕从map中取出List<T>

关注List是否存在 如果存在在list中 add T否则要newArrayList再add T

事实上这种代码太多 如果某次忘记判断就会很容易出现问题

Multimap的出现解决了该问题

Multimap

Multimap<TaMemberCardEntityExtendImport, TaMemberCardEntityExtendImport> memberCardMultimap = ArrayListMultimap.create(list.size() / EXPECTED_VALUES_PER_KEY, EXPECTED_VALUES_PER_KEY); TaMemberCardEntityExtendImport currentTemplate = null; for (TaMemberCardEntityExtendImport cardEntity : list) {     cardEntity.setUseType(useType);     if (cardEntity.getDataType() == DATA_TYPE_CARD_TEMPLATE) {         currentTemplate = cardEntity;     } else if (currentTemplate != null) {         //导入时跟开卡一致,将实际金额填入vipMoney         cardEntity.setVipMoney(cardEntity.getRealAmount());         cardEntity.setPrestoreAmount(cardEntity.getRealAmount());         memberCardMultimap.put(currentTemplate, cardEntity);     } }
  • asMap为Multimap<K, V>提供Map<K,Collection<V>>形式的视图。返回的Map支持remove操作,并且会反映到底层的Multimap,但它不支持put或putAll操作。更重要的是,如果你想为Multimap中没有的键返回null,而不是一个新的、可写的空集合,你就可以使用asMap().get(key)。(你可以并且应当把asMap.get(key)返回的结果转化为适当的集合类型——如SetMultimap.asMap.get(key)的结果转为Set,ListMultimap.asMap.get(key)的结果转为List——Java类型系统不允许ListMultimap直接为asMap.get(key)返回List
  • entries用Collection<Map.Entry<K, V>>返回Multimap中所有”键-单个值映射”——包括重复键。(对SetMultimap,返回的是Set)
  • keySet用Set表示Multimap中所有不同的键。
  • keys用Multiset表示Multimap中的所有键,每个键重复出现的次数等于它映射的值的个数。可以从这个Multiset中移除元素,但不能做添加操作;移除操作会反映到底层的Multimap。
  • values()用一个”扁平”的Collection<V>包含Multimap中的所有值。这有一点类似于Iterables.concat(multimap.asMap().values()),但它直接返回了单个Collection,而不像multimap.asMap().values()那样是按键区分开的Collection。
  •  

 

Multimap提供了多种形式的实现。在大多数要使用Map<K, Collection<V>>的地方,你都可以使用它们:

实现 键行为类似 值行为类似
ArrayListMultimap HashMap ArrayList
HashMultimap HashMap HashSet
LinkedListMultimap* LinkedHashMap* LinkedList*
LinkedHashMultimap** LinkedHashMap LinkedHashMap
TreeMultimap TreeMap TreeSet
ImmutableListMultimap ImmutableMap ImmutableList
ImmutableSetMultimap ImmutableMap ImmutableSet

本文发表于2018年01月24日 20:32
(c)注:本文转载自https://my.oschina.net/qixiaobo025/blog/1612570,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1865 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1