diff options
| author | Ben Culkin <scorpress@gmail.com> | 2020-11-21 22:53:56 -0500 |
|---|---|---|
| committer | Ben Culkin <scorpress@gmail.com> | 2020-11-21 22:53:56 -0500 |
| commit | 86ad50b4df6166c6f99b08d91d49fe59ee754619 (patch) | |
| tree | 75465a1fa0a99b9c83026953b6a2ed0d736c0a93 /src/main/java/bjc/funcdata | |
| parent | c3954bbe63378324762a6cdd5caf363405340973 (diff) | |
Change IMap to use Optional, not exceptions
IMap now returns optionals, instead of throwing an exception
Diffstat (limited to 'src/main/java/bjc/funcdata')
| -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 |
4 files changed, 24 insertions, 47 deletions
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 |
