summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/funcdata
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/funcdata')
-rw-r--r--src/main/java/bjc/funcdata/ExtendedMap.java2
-rw-r--r--src/main/java/bjc/funcdata/FunctionalMap.java16
-rw-r--r--src/main/java/bjc/funcdata/IMap.java48
-rw-r--r--src/main/java/bjc/funcdata/TransformedValueMap.java5
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