Added DefaultMap
This commit is contained in:
122
eco-api/src/main/java/com/willfp/eco/core/map/DefaultMap.java
Normal file
122
eco-api/src/main/java/com/willfp/eco/core/map/DefaultMap.java
Normal file
@@ -0,0 +1,122 @@
|
||||
package com.willfp.eco.core.map;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* A map with a default value.
|
||||
*
|
||||
* @param <K> The key type.
|
||||
* @param <V> The value type.
|
||||
*/
|
||||
public class DefaultMap<K, V> implements Map<K, V> {
|
||||
/**
|
||||
* The map.
|
||||
*/
|
||||
private final Map<K, V> map;
|
||||
|
||||
/**
|
||||
* The default value.
|
||||
*/
|
||||
private final V defaultValue;
|
||||
|
||||
/**
|
||||
* Create a new default map.
|
||||
*
|
||||
* @param defaultValue The default value.
|
||||
*/
|
||||
public DefaultMap(@NotNull final V defaultValue) {
|
||||
this.map = new HashMap<>();
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new default map.
|
||||
*
|
||||
* @param map The map.
|
||||
* @param defaultValue The default value.
|
||||
*/
|
||||
public DefaultMap(@NotNull final Map<K, V> map,
|
||||
@NotNull final V defaultValue) {
|
||||
this.map = map;
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
@SuppressWarnings("unchecked")
|
||||
public V get(@Nullable final Object key) {
|
||||
if (key == null) {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
if (map.get(key) == null) {
|
||||
map.put((K) key, defaultValue);
|
||||
}
|
||||
|
||||
return map.get(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return map.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return map.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsKey(@Nullable final Object key) {
|
||||
return map.containsKey(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsValue(@Nullable final Object value) {
|
||||
return map.containsValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public V put(@NotNull final K key, @Nullable final V value) {
|
||||
return map.put(key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public V remove(@NotNull final Object key) {
|
||||
return map.remove(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putAll(@NotNull final Map<? extends K, ? extends V> m) {
|
||||
map.putAll(m);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
map.clear();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Set<K> keySet() {
|
||||
return map.keySet();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<V> values() {
|
||||
return map.values();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Set<Entry<K, V>> entrySet() {
|
||||
return map.entrySet();
|
||||
}
|
||||
}
|
||||
19
eco-api/src/main/java/com/willfp/eco/core/map/ListMap.java
Normal file
19
eco-api/src/main/java/com/willfp/eco/core/map/ListMap.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package com.willfp.eco.core.map;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Maps keys to lists of values.
|
||||
*
|
||||
* @param <K> The key type.
|
||||
* @param <V> The value type.
|
||||
*/
|
||||
public class ListMap<K, V> extends DefaultMap<K, List<V>> {
|
||||
/**
|
||||
* Create a new list map.
|
||||
*/
|
||||
public ListMap() {
|
||||
super(new ArrayList<>());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.willfp.eco.core.map;
|
||||
|
||||
/**
|
||||
* Maps keys to lists of values.
|
||||
*
|
||||
* @param <K> The key type.
|
||||
* @param <K1> The key type of the map.
|
||||
* @param <V> The value type of the list in the map.
|
||||
*/
|
||||
public class ListMappedMap<K, K1, V> extends DefaultMap<K, ListMap<K1, V>> {
|
||||
/**
|
||||
* Create a new list map.
|
||||
*/
|
||||
public ListMappedMap() {
|
||||
super(new ListMap<>());
|
||||
}
|
||||
}
|
||||
20
eco-api/src/main/java/com/willfp/eco/core/map/MappedMap.java
Normal file
20
eco-api/src/main/java/com/willfp/eco/core/map/MappedMap.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package com.willfp.eco.core.map;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Maps keys to lists of values.
|
||||
*
|
||||
* @param <K> The key type.
|
||||
* @param <K1> The key type of the map.
|
||||
* @param <V> The value type of th emap.
|
||||
*/
|
||||
public class MappedMap<K, K1, V> extends DefaultMap<K, Map<K1, V>> {
|
||||
/**
|
||||
* Create a new list map.
|
||||
*/
|
||||
public MappedMap() {
|
||||
super(new HashMap<>());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user