/* * 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 { private transient final Map> map; public MultiSetMap() { map = new HashMap<>(); } private Set createSet() { return new HashSet<>(); } /** * put to MultiSetMap * * @param key 键 * @param value 值 * @return boolean */ public boolean put(K key, V value) { Set 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> values = map.values(); return values.stream().anyMatch(vs -> vs.contains(value)); } /** * key 集合 * * @return keys */ public Set keySet() { return map.keySet(); } /** * put list to MultiSetMap * * @param key 键 * @param set 值列表 * @return boolean */ public boolean putAll(K key, Set set) { if (set == null) { return false; } else { map.put(key, set); return true; } } /** * get List by key * * @param key 键 * @return List */ public Set get(K key) { return map.get(key); } /** * clear MultiSetMap */ public void clear() { map.clear(); } /** * isEmpty * * @return isEmpty */ public boolean isEmpty() { return map.isEmpty(); } }