¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * 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(); |
| | | } |
| | | } |