diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/bjc/esodata/PushdownMap.java | 24 | ||||
| -rw-r--r-- | src/main/java/bjc/esodata/SimpleDirectory.java | 4 | ||||
| -rw-r--r-- | src/main/java/bjc/esodata/UnifiedDirectory.java | 4 | ||||
| -rw-r--r-- | src/main/java/bjc/funcdata/ExtendedMap.java | 2 | ||||
| -rw-r--r-- | src/main/java/bjc/funcdata/FunctionalMap.java | 16 | ||||
| -rw-r--r-- | src/main/java/bjc/funcdata/IMap.java | 48 | ||||
| -rw-r--r-- | src/main/java/bjc/funcdata/TransformedValueMap.java | 5 |
7 files changed, 44 insertions, 59 deletions
diff --git a/src/main/java/bjc/esodata/PushdownMap.java b/src/main/java/bjc/esodata/PushdownMap.java index a30161c..410eb53 100644 --- a/src/main/java/bjc/esodata/PushdownMap.java +++ b/src/main/java/bjc/esodata/PushdownMap.java @@ -1,7 +1,9 @@ package bjc.esodata; +import java.util.*; import java.util.function.*; +import bjc.data.*; import bjc.funcdata.*; /** @@ -48,8 +50,8 @@ public class PushdownMap<KeyType, ValueType> implements IMap<KeyType, ValueType> } @Override - public ValueType get(final KeyType key) { - return backing.get(key).top(); + public Optional<ValueType> get(final KeyType key) { + return backing.get(key).map((stack) -> stack.top()); } @Override @@ -67,7 +69,7 @@ public class PushdownMap<KeyType, ValueType> implements IMap<KeyType, ValueType> if (isFrozen) throw new ObjectFrozen("Can't insert key " + key + " into frozen map"); if (backing.containsKey(key)) { - final Stack<ValueType> stk = backing.get(key); + final Stack<ValueType> stk = backing.get(key).get(); final ValueType vl = stk.top(); @@ -86,12 +88,18 @@ public class PushdownMap<KeyType, ValueType> implements IMap<KeyType, ValueType> @Override public ValueType remove(final KeyType key) { if (isFrozen) throw new ObjectFrozen("Can't remove key " + key + " from frozen map"); - - final Stack<ValueType> stk = backing.get(key); - - if (stk.size() > 1) return stk.pop(); - return backing.remove(key).top(); + IHolder<ValueType> result = IHolder.of(null); + + backing.get(key).ifPresent((stk) -> { + if (stk.size() > 1) { + result.replace(stk.pop()); + } else { + result.replace(backing.remove(key).top()); + } + }); + + return result.getValue(); } @Override diff --git a/src/main/java/bjc/esodata/SimpleDirectory.java b/src/main/java/bjc/esodata/SimpleDirectory.java index 36f5f5a..ddc65b4 100644 --- a/src/main/java/bjc/esodata/SimpleDirectory.java +++ b/src/main/java/bjc/esodata/SimpleDirectory.java @@ -30,7 +30,7 @@ public class SimpleDirectory<K, V> implements Directory<K, V> { @Override public Directory<K, V> getSubdirectory(final K key) { - return children.get(key); + return children.get(key).orElse(null); } @Override @@ -50,7 +50,7 @@ public class SimpleDirectory<K, V> implements Directory<K, V> { @Override public V getKey(final K key) { - return data.get(key); + return data.get(key).orElse(null); } @Override diff --git a/src/main/java/bjc/esodata/UnifiedDirectory.java b/src/main/java/bjc/esodata/UnifiedDirectory.java index dcbac89..abf9a4c 100644 --- a/src/main/java/bjc/esodata/UnifiedDirectory.java +++ b/src/main/java/bjc/esodata/UnifiedDirectory.java @@ -30,7 +30,7 @@ public class UnifiedDirectory<K, V> implements Directory<K, V> { @Override public Directory<K, V> getSubdirectory(final K key) { - return children.get(key); + return children.get(key).orElse(null); } @Override @@ -56,7 +56,7 @@ public class UnifiedDirectory<K, V> implements Directory<K, V> { @Override public V getKey(final K key) { - return data.get(key); + return data.get(key).orElse(null); } @Override diff --git a/src/main/java/bjc/funcdata/ExtendedMap.java b/src/main/java/bjc/funcdata/ExtendedMap.java index 059181f..9638cdc 100644 --- a/src/main/java/bjc/funcdata/ExtendedMap.java +++ b/src/main/java/bjc/funcdata/ExtendedMap.java @@ -60,7 +60,7 @@ class ExtendedMap<KeyType, ValueType> implements IMap<KeyType, ValueType> { } @Override - public ValueType get(final KeyType key) { + public Optional<ValueType> get(final KeyType key) { if (store.containsKey(key)) return store.get(key); else return delegate.get(key); } diff --git a/src/main/java/bjc/funcdata/FunctionalMap.java b/src/main/java/bjc/funcdata/FunctionalMap.java index 9836c98..3ab2598 100644 --- a/src/main/java/bjc/funcdata/FunctionalMap.java +++ b/src/main/java/bjc/funcdata/FunctionalMap.java @@ -73,16 +73,14 @@ public class FunctionalMap<KeyType, ValueType> implements IMap<KeyType, ValueTyp } @Override - public ValueType get(final KeyType key) { + public Optional<ValueType> get(final KeyType key) { if (key == null) throw new NullPointerException("Key must not be null"); - if (!wrappedMap.containsKey(key)) { - final String msg = String.format("Key %s is not present in the map", key); - - throw new IllegalArgumentException(msg); + if (wrappedMap.containsKey(key)) { + return Optional.of(wrappedMap.get(key)); + } else { + return Optional.empty(); } - - return wrappedMap.get(key); } @Override @@ -138,8 +136,8 @@ public class FunctionalMap<KeyType, ValueType> implements IMap<KeyType, ValueTyp if (wrappedMap == null) { if (other.wrappedMap != null) return false; } else if (!wrappedMap.equals(other.wrappedMap)) { - return false; - } + return false; + } return true; } diff --git a/src/main/java/bjc/funcdata/IMap.java b/src/main/java/bjc/funcdata/IMap.java index 4eaa9c0..ca9ef11 100644 --- a/src/main/java/bjc/funcdata/IMap.java +++ b/src/main/java/bjc/funcdata/IMap.java @@ -1,5 +1,6 @@ package bjc.funcdata; +import java.util.*; import java.util.function.*; /** @@ -60,31 +61,7 @@ public interface IMap<KeyType, ValueType> extends IFreezable { * * @return The value of the key. */ - ValueType get(KeyType key); - - /** - * Get a value from the map, and return a default value if the key doesn't - * exist. - * - * @param key - * The key to attempt to retrieve. - * - * @param defaultValue - * The value to return if the key doesn't exist. - * - * @return The value associated with the key, or the default value if the key - * doesn't exist. - */ - default ValueType getOrDefault(final KeyType key, final ValueType defaultValue) { - try { - return get(key); - } catch (final IllegalArgumentException iaex) { - /* - * We don't care about this, because it indicates a key is missing. - */ - return defaultValue; - } - } + Optional<ValueType> get(KeyType key); /** * Add an entry to the map. @@ -150,7 +127,7 @@ public interface IMap<KeyType, ValueType> extends IFreezable { final IList<ValueType> returns = new FunctionalList<>(); for (final KeyType key : keyList()) { - returns.add(get(key)); + returns.add(get(key).orElse(null)); } return returns; @@ -191,17 +168,18 @@ public interface IMap<KeyType, ValueType> extends IFreezable { return extend(new FunctionalMap<>()); }; + /** - * Extends this map, creating a new map that will delegate queries to this map, - * but store any added values in the provided map. - * - * @param backer The map to store added values in. - * - * @return An extended map. - */ + * Extend this map, creating a new map that will delegate queries to + * the current map but store any added values in the provided map. + * + * @param backer The map to store values in. + * + * @return An extended map, with the specified backing map. + */ default IMap<KeyType, ValueType> extend(IMap<KeyType, ValueType> backer) { - return new ExtendedMap<>(this, backer); - }; + return new ExtendedMap<>(this, backer); + }; /** * Static method to create a basic instance of IMap. diff --git a/src/main/java/bjc/funcdata/TransformedValueMap.java b/src/main/java/bjc/funcdata/TransformedValueMap.java index cf4a9d8..1e0ef51 100644 --- a/src/main/java/bjc/funcdata/TransformedValueMap.java +++ b/src/main/java/bjc/funcdata/TransformedValueMap.java @@ -1,5 +1,6 @@ package bjc.funcdata; +import java.util.*; import java.util.function.*; /** @@ -62,8 +63,8 @@ final class TransformedValueMap<OldKey, OldValue, NewValue> } @Override - public NewValue get(final OldKey key) { - return transformer.apply(backing.get(key)); + public Optional<NewValue> get(final OldKey key) { + return backing.get(key).map(transformer); } @Override |
