From 77fcc58d1facffbc3af50be8c05985350e9f1355 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Sun, 17 Apr 2016 15:01:44 -0400 Subject: Code maintenace and changes --- .../java/bjc/utils/funcdata/FunctionalMap.java | 138 ++++----------------- 1 file changed, 27 insertions(+), 111 deletions(-) (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalMap.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalMap.java b/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalMap.java index da30064..eaa425b 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalMap.java +++ b/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalMap.java @@ -6,110 +6,21 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; -import bjc.utils.data.experimental.IPair; +import bjc.utils.data.IPair; /** * Basic implementation of {@link IFunctionalMap} * * @author ben * - * @param + * @param * The type of the map's keys - * @param + * @param * The type of the map's values */ -public class FunctionalMap implements IFunctionalMap { - /** - * A map that transforms values from one type to another - * - * @author ben - * - * @param - * The type of the map's keys - * @param - * The type of the map's values - * @param - * The type of the transformed values - */ - private static final class TransformedValueMap - implements IFunctionalMap { - private IFunctionalMap mapToTransform; - private Function transformer; - - public TransformedValueMap(IFunctionalMap destMap, - Function transform) { - mapToTransform = destMap; - transformer = transform; - } - - @Override - public V2 get(K key) { - return transformer.apply(mapToTransform.get(key)); - } - - @Override - public boolean containsKey(K key) { - return mapToTransform.containsKey(key); - } - - @Override - public String toString() { - return mapToTransform.toString(); - } - - @Override - public V2 put(K key, V2 val) { - throw new UnsupportedOperationException( - "Can't add items to transformed map"); - } - - @Override - public IFunctionalMap mapValues( - Function transform) { - return new TransformedValueMap<>(this, transform); - } - - @Override - public IFunctionalList keyList() { - return mapToTransform.keyList(); - } - - @Override - public void forEach(BiConsumer action) { - mapToTransform.forEach((key, val) -> { - action.accept(key, transformer.apply(val)); - }); - } - - @Override - public V2 remove(K key) { - return transformer.apply(mapToTransform.remove(key)); - } - - @Override - public int getSize() { - return mapToTransform.getSize(); - } - - @Override - public void forEachKey(Consumer action) { - mapToTransform.forEachKey(action); - } - - @Override - public void forEachValue(Consumer action) { - mapToTransform.forEachValue((val) -> { - action.accept(transformer.apply(val)); - }); - } - - @Override - public IFunctionalList valueList() { - return mapToTransform.valueList().map(transformer); - } - } - - private Map wrappedMap; +public class FunctionalMap + implements IFunctionalMap { + private Map wrappedMap; /** * Create a new blank functional map @@ -124,7 +35,7 @@ public class FunctionalMap implements IFunctionalMap { * @param wrap * The map to wrap */ - public FunctionalMap(Map wrap) { + public FunctionalMap(Map wrap) { if (wrap == null) { throw new NullPointerException("Map to wrap must not be null"); } @@ -139,10 +50,10 @@ public class FunctionalMap implements IFunctionalMap { * The entries to put into the map */ @SafeVarargs - public FunctionalMap(IPair... entries) { + public FunctionalMap(IPair... entries) { this(); - for (IPair entry : entries) { + for (IPair entry : entries) { entry.doWith((key, val) -> { wrappedMap.put(key, val); }); @@ -155,7 +66,7 @@ public class FunctionalMap implements IFunctionalMap { * @see bjc.utils.funcdata.IFunctionalMap#put(K, V) */ @Override - public V put(K key, V val) { + public ValueType put(KeyType key, ValueType val) { if (key == null) { throw new NullPointerException("Key must not be null"); } @@ -169,7 +80,7 @@ public class FunctionalMap implements IFunctionalMap { * @see bjc.utils.funcdata.IFunctionalMap#get(K) */ @Override - public V get(K key) { + public ValueType get(KeyType key) { if (key == null) { throw new NullPointerException("Key must not be null"); } @@ -189,8 +100,8 @@ public class FunctionalMap implements IFunctionalMap { * Function) */ @Override - public IFunctionalMap mapValues( - Function transformer) { + public IFunctionalMap mapValues( + Function transformer) { if (transformer == null) { throw new NullPointerException("Transformer must not be null"); } @@ -204,7 +115,7 @@ public class FunctionalMap implements IFunctionalMap { * @see bjc.utils.funcdata.IFunctionalMap#containsKey(K) */ @Override - public boolean containsKey(K key) { + public boolean containsKey(KeyType key) { return wrappedMap.containsKey(key); } @@ -214,8 +125,8 @@ public class FunctionalMap implements IFunctionalMap { } @Override - public IFunctionalList keyList() { - FunctionalList keys = new FunctionalList<>(); + public IFunctionalList keyList() { + FunctionalList keys = new FunctionalList<>(); wrappedMap.keySet().forEach((key) -> { keys.add(key); @@ -225,12 +136,12 @@ public class FunctionalMap implements IFunctionalMap { } @Override - public void forEach(BiConsumer action) { + public void forEach(BiConsumer action) { wrappedMap.forEach(action); } @Override - public V remove(K key) { + public ValueType remove(KeyType key) { return wrappedMap.remove(key); } @@ -240,18 +151,18 @@ public class FunctionalMap implements IFunctionalMap { } @Override - public void forEachKey(Consumer action) { + public void forEachKey(Consumer action) { wrappedMap.keySet().forEach(action); } @Override - public void forEachValue(Consumer action) { + public void forEachValue(Consumer action) { wrappedMap.values().forEach(action); } @Override - public IFunctionalList valueList() { - FunctionalList values = new FunctionalList<>(); + public IFunctionalList valueList() { + FunctionalList values = new FunctionalList<>(); wrappedMap.values().forEach((value) -> { values.add(value); @@ -259,4 +170,9 @@ public class FunctionalMap implements IFunctionalMap { return values; } + + @Override + public IFunctionalMap extend() { + return new ExtendedMap<>(this, new FunctionalMap<>()); + } } \ No newline at end of file -- cgit v1.2.3