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