From 36cfcd24c2b39ff609b90301de587b7cad141f2e Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 23 Feb 2023 20:51:21 +0000 Subject: [PATCH] Added DefaultMap --- .../com/willfp/eco/core/map/DefaultMap.java | 122 ++++++++++++++++++ .../java/com/willfp/eco/core/map/ListMap.java | 19 +++ .../willfp/eco/core/map/ListMappedMap.java | 17 +++ .../com/willfp/eco/core/map/MappedMap.java | 20 +++ 4 files changed, 178 insertions(+) create mode 100644 eco-api/src/main/java/com/willfp/eco/core/map/DefaultMap.java create mode 100644 eco-api/src/main/java/com/willfp/eco/core/map/ListMap.java create mode 100644 eco-api/src/main/java/com/willfp/eco/core/map/ListMappedMap.java create mode 100644 eco-api/src/main/java/com/willfp/eco/core/map/MappedMap.java diff --git a/eco-api/src/main/java/com/willfp/eco/core/map/DefaultMap.java b/eco-api/src/main/java/com/willfp/eco/core/map/DefaultMap.java new file mode 100644 index 00000000..a62171f2 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/map/DefaultMap.java @@ -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 The key type. + * @param The value type. + */ +public class DefaultMap implements Map { + /** + * The map. + */ + private final Map 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 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 m) { + map.putAll(m); + } + + @Override + public void clear() { + map.clear(); + } + + @NotNull + @Override + public Set keySet() { + return map.keySet(); + } + + @NotNull + @Override + public Collection values() { + return map.values(); + } + + @NotNull + @Override + public Set> entrySet() { + return map.entrySet(); + } +} diff --git a/eco-api/src/main/java/com/willfp/eco/core/map/ListMap.java b/eco-api/src/main/java/com/willfp/eco/core/map/ListMap.java new file mode 100644 index 00000000..5cd884a6 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/map/ListMap.java @@ -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 The key type. + * @param The value type. + */ +public class ListMap extends DefaultMap> { + /** + * Create a new list map. + */ + public ListMap() { + super(new ArrayList<>()); + } +} diff --git a/eco-api/src/main/java/com/willfp/eco/core/map/ListMappedMap.java b/eco-api/src/main/java/com/willfp/eco/core/map/ListMappedMap.java new file mode 100644 index 00000000..cf6111e3 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/map/ListMappedMap.java @@ -0,0 +1,17 @@ +package com.willfp.eco.core.map; + +/** + * Maps keys to lists of values. + * + * @param The key type. + * @param The key type of the map. + * @param The value type of the list in the map. + */ +public class ListMappedMap extends DefaultMap> { + /** + * Create a new list map. + */ + public ListMappedMap() { + super(new ListMap<>()); + } +} diff --git a/eco-api/src/main/java/com/willfp/eco/core/map/MappedMap.java b/eco-api/src/main/java/com/willfp/eco/core/map/MappedMap.java new file mode 100644 index 00000000..b4025aa9 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/map/MappedMap.java @@ -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 The key type. + * @param The key type of the map. + * @param The value type of th emap. + */ +public class MappedMap extends DefaultMap> { + /** + * Create a new list map. + */ + public MappedMap() { + super(new HashMap<>()); + } +}