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 --- .../bjc/utils/funcdata/TransformedValueMap.java | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/funcdata/TransformedValueMap.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata/TransformedValueMap.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcdata/TransformedValueMap.java b/BJC-Utils2/src/main/java/bjc/utils/funcdata/TransformedValueMap.java new file mode 100644 index 0000000..75557fa --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/funcdata/TransformedValueMap.java @@ -0,0 +1,100 @@ +package bjc.utils.funcdata; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Function; + +/** + * 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 + */ +final class TransformedValueMap + implements IFunctionalMap { + private IFunctionalMap mapToTransform; + private Function transformer; + + public TransformedValueMap(IFunctionalMap destMap, + Function transform) { + mapToTransform = destMap; + transformer = transform; + } + + @Override + public NewValue get(OldKey key) { + return transformer.apply(mapToTransform.get(key)); + } + + @Override + public boolean containsKey(OldKey key) { + return mapToTransform.containsKey(key); + } + + @Override + public String toString() { + return mapToTransform.toString(); + } + + @Override + public NewValue put(OldKey key, NewValue 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 NewValue remove(OldKey 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); + } + + @Override + public IFunctionalMap extend() { + return new ExtendedMap<>(this, new FunctionalMap<>()); + } +} \ No newline at end of file -- cgit v1.2.3