xiejun
2024-11-01 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a
Source/BladeX-Tool/blade-core-auto/src/main/java/org/springblade/core/auto/common/MultiSetMap.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package org.springblade.core.auto.common;
import java.util.*;
/**
 * MultiSetMap
 *
 * @author L.cm
 */
public class MultiSetMap<K, V> {
   private transient final Map<K, Set<V>> map;
   public MultiSetMap() {
      map = new HashMap<>();
   }
   private Set<V> createSet() {
      return new HashSet<>();
   }
   /**
    * put to MultiSetMap
    *
    * @param key   é”®
    * @param value å€¼
    * @return boolean
    */
   public boolean put(K key, V value) {
      Set<V> set = map.get(key);
      if (set == null) {
         set = createSet();
         if (set.add(value)) {
            map.put(key, set);
            return true;
         } else {
            throw new AssertionError("New set violated the set spec");
         }
      } else if (set.add(value)) {
         return true;
      } else {
         return false;
      }
   }
   /**
    * æ˜¯å¦åŒ…含某个key
    *
    * @param key key
    * @return ç»“æžœ
    */
   public boolean containsKey(K key) {
      return map.containsKey(key);
   }
   /**
    * æ˜¯å¦åŒ…含 value ä¸­çš„æŸä¸ªå€¼
    *
    * @param value value
    * @return æ˜¯å¦åŒ…含
    */
   public boolean containsVal(V value) {
      Collection<Set<V>> values = map.values();
      return values.stream().anyMatch(vs -> vs.contains(value));
   }
   /**
    * key é›†åˆ
    *
    * @return keys
    */
   public Set<K> keySet() {
      return map.keySet();
   }
   /**
    * put list to MultiSetMap
    *
    * @param key é”®
    * @param set å€¼åˆ—表
    * @return boolean
    */
   public boolean putAll(K key, Set<V> set) {
      if (set == null) {
         return false;
      } else {
         map.put(key, set);
         return true;
      }
   }
   /**
    * get List by key
    *
    * @param key é”®
    * @return List
    */
   public Set<V> get(K key) {
      return map.get(key);
   }
   /**
    * clear MultiSetMap
    */
   public void clear() {
      map.clear();
   }
   /**
    * isEmpty
    *
    * @return isEmpty
    */
   public boolean isEmpty() {
      return map.isEmpty();
   }
}