All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.voovan.tools.collection.MultiMap Maven / Gradle / Ivy

package org.voovan.tools.collection;

/**
 * 多值 Map
 *
 * @author helyho
 *         

* Voovan Framework. * WebSite: https://github.com/helyho/Voovan * Licence: Apache v2 License */ import org.voovan.tools.json.JSON; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; public class MultiMap extends ConcurrentHashMap> { public MultiMap() {} public MultiMap(Map> map) { super(map); } /** * 获取值的集合 * @param key 键 * @return 值的集合 */ public List getValues(K key) { List vals = (List)super.get(key); if ((vals == null) || (vals.isEmpty())) { return null; } return vals; } /** * 获取值 * @param key 键 * @param i 值的索引 * @return 值 */ public V getValue(K key, int i) { List vals = getValues(key); if (vals == null) { return null; } if ((i == 0) && (vals.isEmpty())) { return null; } return (V)vals.get(i); } /** * 增加值 * @param key 键 * @param value 值 * @return 值的集合 */ public List putValue(K key, V value) { if (value == null) { return (List)super.put(key, null); } List vals = getValueList(key); vals.add(value); return vals; } /** * 一次插入多个键值 * @param input 键/值(List)的 Map 对象 */ public void putAllValues(Map input) { for (Entry entry : input.entrySet()) { putValue((K)entry.getKey(), entry.getValue()); } } /** * 一次插入一个键值 * @param key 键 * @param values 值的集合 * @return 值的集合 */ public List putValues(K key, List values) { return (List)super.put(key, values); } private List getValueList(K key){ List lo = (List) get(key); if (lo == null) { lo = new Vector(); List retValue = putIfAbsent(key, lo); lo = retValue == null ? lo : retValue; } return lo; } /** * 一次插入一个键值 * @param key 键 * @param values 值的数组 * @return 值的集合 */ @SafeVarargs public final List putValues(K key, V... values) { List list = getValueList(key); list.addAll(Arrays.asList(values)); return (List)super.put(key, list); } /** * 一次插入一个键值 * @param key 键 * @param value 值 */ public void add(K key, V value) { List lo = getValueList(key); lo.add(value); super.put(key, lo); } /** * 增加键的一系列的值 * @param key 键 * @param values 值的集合 */ public void addValues(K key, List values) { List lo = getValueList(key); lo.addAll(values); super.put(key, lo); } /** * 增加键的一系列的值 * @param key 键 * @param values 值的集合 */ public void addValues(K key, V[] values) { List lo = getValueList(key); lo.addAll(Arrays.asList(values)); super.put(key, lo); } /** * 增加键/值 * @param map 键/值(List)的 Map 对象 * @return 是否成功 true:成功,false:失败 */ public boolean addAllValues(MultiMap map) { boolean merged = false; if ((map == null) || (map.isEmpty())) { return merged; } for (Entry> entry : map.entrySet()) { K name = (K)entry.getKey(); List values = (List)entry.getValue(); if (containsKey(name)) { merged = true; } addValues(name, values); } return merged; } /** * 移除某个值 * @param key 键 * @param index 值索引位置 * @return 成功:返回移除的对象 , 失败:返回 null */ public V removeValue(K key, int index) { List lo = (List)get(key); if ((lo == null) || (lo.isEmpty())) { return null; } V ret = lo.remove(index); if (lo.isEmpty()) { remove(key); } return ret; } /** * 移除某个值 * @param key 键 * @param value 值 * @return 成功:true , 失败:false */ public boolean removeValue(K key, V value) { List lo = (List)get(key); if ((lo == null) || (lo.isEmpty())) { return false; } boolean ret = lo.remove(value); if (lo.isEmpty()) { remove(key); } return ret; } /** * 是否包含某个值 * @param value 值 * @return 成功:true , 失败:false */ public boolean containsValues(V value) { for (List vals : values()) { if ((vals.size() > 0) && (vals.contains(value))) { return true; } } return false; } public String toString() { return JSON.toJSON(this); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy