Interface MultiValueMap<K,V>

Type Parameters:
K - 键类型
V - 值类型
All Superinterfaces:
Map<K,Collection<V>>
All Known Implementing Classes:
AbstractCollValueMap, CollectionValueMap, Graph, ListValueMap, SetValueMap

public interface MultiValueMap<K,V> extends Map<K,Collection<V>>
一个键对应多个值的集合Map实现,提供针对键对应的值集合中的元素而非值集合本身的一些快捷操作, 本身可作为一个值为Collection类型的Map使用。

值集合类型

值集合的类型由接口的实现类自行维护,当通过MultiValueMap定义的方法进行增删改操作时, 实现类应保证通过通过实例方法获得的集合类型都一致。但是若用户直接通过Map定义的方法进行增删改操作时, 实例无法保证通过实例方法获得的集合类型都一致。因此,若无必要则更推荐通过MultiValueMap定义的方法进行操作。

对值集合的修改

当通过实例方法获得值集合时,若该集合允许修改,则对值集合的修改将会影响到其所属的MultiValueMap实例,反之亦然。 因此当同时遍历当前实例或者值集合时,若存在写操作,则需要注意可能引发的ConcurrentModificationException

Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Method Details

    • put

      Collection<V> put(K key, Collection<V> value)
      更新键对应的值集合 注意:该操作将移除键对应的旧值集合,若仅需向值集合追加应值,则应使用putAllValues(Object, Collection)
      Specified by:
      put in interface Map<K,V>
      Parameters:
      key - 键
      value - 键对应的新值集合
      Returns:
      旧值集合
    • putAll

      void putAll(Map<? extends K,? extends Collection<V>> map)
      更新全部键的值集合 注意:该操作将移除键对应的旧值集合,若仅需向值集合追加应值,则应使用putAllValues(Object, Collection)
      Specified by:
      putAll in interface Map<K,V>
      Parameters:
      map - 需要更新的键值对集合
    • putAllValues

      default void putAllValues(Map<? extends K,? extends Collection<V>> m)
      将集合中的全部键值对追加到当前实例中,效果等同于:
      
       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

      boolean putAllValues(K key, Collection<V> coll)
      将集合中的全部元素对追加到指定键对应的值集合中,效果等同于:
      
       	for (V val : coll) {
       		map.putValue(data, val)
          }
       
      Parameters:
      key - 键
      coll - 待添加的值集合
      Returns:
      是否成功添加
    • putValues

      default boolean putValues(K key, V... values)
      将数组中的全部元素追加到指定的值集合中,效果等同于:
      
       	for (V val : values) {
       		map.putValue(data, val)
          }
       
      Parameters:
      key - 键
      values - 待添加的值
      Returns:
      boolean
    • putValue

      boolean putValue(K key, V value)
      向指定键对应的值集合追加值,效果等同于:
      
       Collection<V> coll = map.get(data);
       if (null == coll) {
           coll.add(value);
           map.put(coll);
       } else {
           coll.add(value);
       }
       
      Parameters:
      key - 键
      value - 值
      Returns:
      是否成功添加
    • removeValue

      boolean removeValue(K key, V value)
      将值从指定键下的值集合中删除
      Parameters:
      key - 键
      value - 值
      Returns:
      是否成功删除
    • removeValues

      default boolean removeValues(K key, V... values)
      将一批值从指定键下的值集合中删除
      Parameters:
      key - 键
      values - 值数组
      Returns:
      是否成功删除
    • removeAllValues

      boolean removeAllValues(K key, Collection<V> values)
      将一批值从指定键下的值集合中删除
      Parameters:
      key - 键
      values - 值集合
      Returns:
      是否成功删除
    • filterAllValues

      default MultiValueMap<K,V> filterAllValues(Predicate<V> filter)
      根据条件过滤所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致
      Parameters:
      filter - 判断方法
      Returns:
      当前实例
    • filterAllValues

      MultiValueMap<K,V> filterAllValues(BiPredicate<K,V> filter)
      根据条件过滤所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致
      Parameters:
      filter - 判断方法
      Returns:
      当前实例
    • replaceAllValues

      default MultiValueMap<K,V> replaceAllValues(UnaryOperator<V> operate)
      根据条件替换所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致
      Parameters:
      operate - 替换方法
      Returns:
      当前实例
    • replaceAllValues

      MultiValueMap<K,V> replaceAllValues(BiFunction<K,V,V> operate)
      根据条件替换所有值集合中的值,并以新值生成新的值集合,新集合中的值集合类型与当前实例的默认值集合类型保持一致
      Parameters:
      operate - 替换方法
      Returns:
      当前实例
    • getValue

      default V getValue(K key, int index)
      获取指定序号的值,若值不存在,返回null
      Parameters:
      key - 键
      index - 第几个值的索引,越界返回null
      Returns:
      值或null
    • getValues

      default Collection<V> getValues(K key)
      获取键对应的值,若值不存在,则返回Collections.emptyList()。效果等同于:
      
       map.getOrDefault(data, Collections.emptyList())
       
      Parameters:
      key - 键
      Returns:
      值集合
    • size

      default int size(K key)
      获取键对应值的数量,若键对应的值不存在,则返回0
      Parameters:
      key - 键
      Returns:
      值的数量
    • allForEach

      default void allForEach(BiConsumer<K,V> consumer)
      遍历所有键值对,效果等同于:
      
       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

      default Collection<V> allValues()
      获取所有的值,效果等同于:
      
       List<V> results = new ArrayList<>();
       for (Collection<V> coll : values()) {
           results.addAll(coll);
       }
       
      Returns: