Interface MultiValueMap<K,V>
- Type Parameters:
K- 键类型V- 值类型
- All Superinterfaces:
Map<K,Collection<V>>
- All Known Implementing Classes:
AbstractCollValueMap,CollectionValueMap,Graph,ListValueMap,SetValueMap
一个键对应多个值的集合
Map实现,提供针对键对应的值集合中的元素而非值集合本身的一些快捷操作, 本身可作为一个值为Collection类型的Map使用。
值集合类型
值集合的类型由接口的实现类自行维护,当通过MultiValueMap定义的方法进行增删改操作时, 实现类应保证通过通过实例方法获得的集合类型都一致。但是若用户直接通过Map定义的方法进行增删改操作时,
实例无法保证通过实例方法获得的集合类型都一致。因此,若无必要则更推荐通过MultiValueMap定义的方法进行操作。
对值集合的修改
当通过实例方法获得值集合时,若该集合允许修改,则对值集合的修改将会影响到其所属的MultiValueMap实例,反之亦然。
因此当同时遍历当前实例或者值集合时,若存在写操作,则需要注意可能引发的ConcurrentModificationException。
- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Nested Class Summary
-
Method Summary
Modifier and TypeMethodDescriptiondefault voidallForEach(BiConsumer<K, V> consumer) 遍历所有键值对,效果等同于:default Collection<V> 获取所有的值,效果等同于:filterAllValues(BiPredicate<K, V> filter) 根据条件过滤所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致default MultiValueMap<K, V> filterAllValues(Predicate<V> filter) 根据条件过滤所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致default V获取指定序号的值,若值不存在,返回nulldefault Collection<V> 获取键对应的值,若值不存在,则返回Collections.emptyList()。效果等同于:put(K key, Collection<V> value) 更新键对应的值集合 注意:该操作将移除键对应的旧值集合,若仅需向值集合追加应值,则应使用putAllValues(Object, Collection)voidputAll(Map<? extends K, ? extends Collection<V>> map) 更新全部键的值集合 注意:该操作将移除键对应的旧值集合,若仅需向值集合追加应值,则应使用putAllValues(Object, Collection)default voidputAllValues(Map<? extends K, ? extends Collection<V>> m) 将集合中的全部键值对追加到当前实例中,效果等同于:booleanputAllValues(K key, Collection<V> coll) 将集合中的全部元素对追加到指定键对应的值集合中,效果等同于:boolean向指定键对应的值集合追加值,效果等同于:default boolean将数组中的全部元素追加到指定的值集合中,效果等同于:booleanremoveAllValues(K key, Collection<V> values) 将一批值从指定键下的值集合中删除booleanremoveValue(K key, V value) 将值从指定键下的值集合中删除default booleanremoveValues(K key, V... values) 将一批值从指定键下的值集合中删除replaceAllValues(BiFunction<K, V, V> operate) 根据条件替换所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致default MultiValueMap<K, V> replaceAllValues(UnaryOperator<V> operate) 根据条件替换所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致default int获取键对应值的数量,若键对应的值不存在,则返回0Methods inherited from interface java.util.Map
clear, compute, computeIfAbsent, computeIfPresent, containsKey, containsValue, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keySet, merge, putIfAbsent, remove, remove, replace, replace, replaceAll, size, values
-
Method Details
-
put
更新键对应的值集合 注意:该操作将移除键对应的旧值集合,若仅需向值集合追加应值,则应使用putAllValues(Object, Collection) -
putAll
更新全部键的值集合 注意:该操作将移除键对应的旧值集合,若仅需向值集合追加应值,则应使用putAllValues(Object, Collection) -
putAllValues
将集合中的全部键值对追加到当前实例中,效果等同于:for (Entry<K, Collection<V>> entry : m.entrySet()) { K data = entry.getKey(); Collection<V> coll = entry.getValues(); for (V val : coll) { map.putValue(data, val) } }- Parameters:
m- 待添加的集合
-
putAllValues
将集合中的全部元素对追加到指定键对应的值集合中,效果等同于:for (V val : coll) { map.putValue(data, val) }- Parameters:
key- 键coll- 待添加的值集合- Returns:
- 是否成功添加
-
putValues
将数组中的全部元素追加到指定的值集合中,效果等同于:for (V val : values) { map.putValue(data, val) }- Parameters:
key- 键values- 待添加的值- Returns:
- boolean
-
putValue
向指定键对应的值集合追加值,效果等同于:Collection<V> coll = map.get(data); if (null == coll) { coll.add(value); map.put(coll); } else { coll.add(value); }- Parameters:
key- 键value- 值- Returns:
- 是否成功添加
-
removeValue
将值从指定键下的值集合中删除- Parameters:
key- 键value- 值- Returns:
- 是否成功删除
-
removeValues
将一批值从指定键下的值集合中删除- Parameters:
key- 键values- 值数组- Returns:
- 是否成功删除
-
removeAllValues
将一批值从指定键下的值集合中删除- Parameters:
key- 键values- 值集合- Returns:
- 是否成功删除
-
filterAllValues
根据条件过滤所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致- Parameters:
filter- 判断方法- Returns:
- 当前实例
-
filterAllValues
根据条件过滤所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致- Parameters:
filter- 判断方法- Returns:
- 当前实例
-
replaceAllValues
根据条件替换所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致- Parameters:
operate- 替换方法- Returns:
- 当前实例
-
replaceAllValues
根据条件替换所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致- Parameters:
operate- 替换方法- Returns:
- 当前实例
-
getValue
获取指定序号的值,若值不存在,返回null- Parameters:
key- 键index- 第几个值的索引,越界返回null- Returns:
- 值或null
-
getValues
获取键对应的值,若值不存在,则返回Collections.emptyList()。效果等同于:map.getOrDefault(data, Collections.emptyList())- Parameters:
key- 键- Returns:
- 值集合
-
size
获取键对应值的数量,若键对应的值不存在,则返回0- Parameters:
key- 键- Returns:
- 值的数量
-
allForEach
遍历所有键值对,效果等同于:for (Entry<K, Collection<V>> entry : entrySet()) { K data = entry.getKey(); Collection<V> coll = entry.getValues(); for (V val : coll) { consumer.accept(data, val); } }- Parameters:
consumer- 操作
-
allValues
获取所有的值,效果等同于:List<V> results = new ArrayList<>(); for (Collection<V> coll : values()) { results.addAll(coll); }- Returns:
- 值
-