From 86ad50b4df6166c6f99b08d91d49fe59ee754619 Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sat, 21 Nov 2020 22:53:56 -0500 Subject: Change IMap to use Optional, not exceptions IMap now returns optionals, instead of throwing an exception --- src/main/java/bjc/funcdata/ExtendedMap.java | 2 +- src/main/java/bjc/funcdata/FunctionalMap.java | 16 ++++---- src/main/java/bjc/funcdata/IMap.java | 48 ++++++---------------- .../java/bjc/funcdata/TransformedValueMap.java | 5 ++- 4 files changed, 24 insertions(+), 47 deletions(-) (limited to 'src/main/java/bjc/funcdata') 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 implements IMap { } @Override - public ValueType get(final KeyType key) { + public Optional 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 implements IMap 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 implements IMap 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 get(KeyType key); /** * Add an entry to the map. @@ -150,7 +127,7 @@ public interface IMap extends IFreezable { final IList 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 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 extend(IMap 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 } @Override - public NewValue get(final OldKey key) { - return transformer.apply(backing.get(key)); + public Optional get(final OldKey key) { + return backing.get(key).map(transformer); } @Override -- cgit v1.2.3