LoupGarou/src/main/java/fr/leomelki/loupgarou/utils/MultipleValueMap.java
2020-09-07 22:23:32 +02:00

68 lines
1.6 KiB
Java

package fr.leomelki.loupgarou.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
public class MultipleValueMap<K, V> {
private final HashMap<K, List<V>> map = new HashMap<>();
public void put(K key, V value) {
List<V> list = map.get(key);
if(list == null)
map.put(key, list = new ArrayList<>());
list.add(value);
}
public V remove(K key, V value) {
List<V> list = map.get(key);
if(list != null) {
boolean removed = list.remove(value);
if(list.size() == 0)
map.remove(key);
if(removed)
return value;
}
return null;
}
public boolean containsKey(K key) {
return map.containsKey(key);
}
public boolean containsValue(V value) {
if(value != null)
for(List<V> list : map.values())
for(V v : list)
if(v != null && v.equals(value))
return true;
return false;
}
public V get(K key) {
return map.containsKey(key) ? map.get(key).get(0) : null;
}
public List<Entry<K, V>> entrySet(){
ArrayList<Entry<K, V>> toReturn = new ArrayList<Entry<K,V>>();
for(Entry<K, List<V>> entry : map.entrySet())
for(V v : entry.getValue())
toReturn.add(new MultipleValueKeyEntry<K, V>(entry.getKey(), v));
return toReturn;
}
public void clear() {
map.clear();
}
@AllArgsConstructor
public static class MultipleValueKeyEntry<K, V> implements Entry<K, V>{
@Getter
private final K key;
@Getter
private V value;
@Override
public V setValue(V value) {
return this.value = value;
}
}
}