key->value是映射,其中针对同一个key,value可以有多个
1、接口
方法有
方法 | 说明 |
int size() | 集合的大小 |
boolean isEmpty() | 集合中是否不包含key-value映射对 |
boolean containsKey(Object key) | 集合中是否包含key的key-value对 |
boolean containsValue(Object value) | 集合中是否包含value的key-value对 |
boolean containsEntry(Object key, Object value) | 集合中是否包含key-value的键值对 |
boolean put(K key, V value) | 存储key-value对,某些multimap支持重复的key-value对,有些不支持 |
boolean remove(Object key, Object value) | 删除一个key-value对,如果有多个,删除哪一个不确定 |
boolean putAll(K key, Iterable<? extends V> values) | 存储key-value对,key为同一个。 |
boolean putAll(Multimap<? extends K, ? extends V> multimap) | 存储multimap中所有的key-value对 |
Collection<V> replaceValues(K key, Iterable<? extends V> values) | 用values规制key对应的原values |
Collection<V> removeAll(Object key) | 删除key对应所有的value |
void clear() | 清空multimap |
Collection<V> get(K key) | 获取key对应的values |
Set<K> keySet() | 获取所有的key |
Multiset<K> keys() | 获取所有的key |
Collection<V> values() | 返回包含values的集合视图,没有删除重复 |
Collection<Entry<K, V>> entries() | 返回所有的key-value对的集合视图。 |
void forEach(BiConsumer<? super K, ? super V> action) | 对所有key-value对执行指定action |
Map<K, Collection<V>> asMap() | 返回multimap的Map视图。 |
boolean equals(Object obj) | 比较集合与obj的相等性 |
int hashCode() | mutlmap的hash值 |
1.1 AbstractMultimap
AbstractMultimap是Multimap的抽象实现类。
字段有
字段 | 说明 |
Collection<Entry<K, V>> entries | multimap的key-value实体 |
Set<K> keySet | key的集合 |
Multiset<K> keys | key的multiset集合 |
Collection<V> values | value的集合 |
Map<K, Collection<V>> asMap | multimap的map表示 |
抽象方法有
方法 | 说明 |
Collection<Entry<K, V>> createEntries() | 创建实体 |
Iterator<Entry<K, V>> entryIterator() | 遍历实体的迭代器 |
Set<K> createKeySet() | 创建key的集合 |
Multiset<K> createKeys() | 创建key的multiset集合 |
Collection<V> createValues() | 创建value的集合 |
Map<K, Collection<V>> createAsMap() | 创建asMap |
1.2 AbstractMapBasedMultimap
继承AbstractMultimap,是Multimap的实现基类,基于成员Map<K, Collection<V>> map来实现基础功能。
抽象方法有
方法 | 说明 |
Collection<V> createCollection() | 创建集合,即多值对应的存储形式 |
2、Multimap的扩展接口
其扩展接口有SetMultimap, ListMultimap, SortedSetMultimap
2.1 ListMultimap
方法有
方法 | 说明 |
List<V> get(K key) | multimap的Collection<V> get(K key)协变 |
List<V> removeAll(Object key) | multimap的Collection<V> removeAll(Object key)协变 |
List<V> replaceValues(K key, Iterable<? extends V> values) | multimap的Collection<V> replaceValues(K key, Iterable<? extends V> values)协变 |
Map<K, Collection<V>> asMap() | 与multimap接口方法一致 |
boolean equals(Object obj) | 与multimap接口方法一致 |
2.2 SetMultimap
方法有
方法 | 说明 |
Set<V> get(K key) | multimap的Collection<V> get(K key)协变 |
Set<V> removeAll(Object key) | multimap的Collection<V> removeAll(Object key)协变 |
Set<V> replaceValues(K key, Iterable<? extends V> values) | multimap的Collection<V> replaceValues(K key, Iterable<? extends V> values)协变 |
Set<Entry<K, V>> entries() | multimap的Collection<Entry<K, V>> entries()协变 |
Map<K, Collection<V>> asMap() | 与multimap接口方法一致 |
boolean equals(Object obj) | 与multimap接口方法一致 |
2.3 SortedSetMultimap
方法有
方法 | 说明 |
SortedSet<V> get(K key) | multimap的Collection<V> get(K key)协变 |
SortedSet<V> removeAll(Object key) | multimap的Collection<V> removeAll(Object key)协变 |
SortedSet<V> replaceValues(K key, Iterable<? extends V> values) | multimap的Collection<V> replaceValues(K key, Iterable<? extends V> values)协变 |
Map<K, Collection<V>> asMap() | 与multimap接口方法一致 |
Comparator<? super V> valueComparator() | 值比较器 |
3、ListMultimap的实现类
3.1 AbstractListMultimap
作为ListMultimap的抽象类,将创建List类用于存储value延迟到子类来完成。
4、SetMultimap的实现类
5、SortedSetMultimap的实现类
6、Immutable*Multimap的实现类
7、实践
流式生成multimap
Multimap<String, String> multimap = Stream.<String>of("abcd", "efgh")
.collect(Multimaps.toMultimap(s -> s.substring(0, 2), s -> s.substring(2), MultimapBuilder.treeKeys().hashSetValues()::build));