From 213171f95845ebc5efcfa73d1cab4b723ff2abf2 Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Tue, 17 Nov 2020 17:44:05 -0500 Subject: Implement IFreezable for IMap --- src/main/java/bjc/funcdata/IMap.java | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/main/java/bjc/funcdata/IMap.java') diff --git a/src/main/java/bjc/funcdata/IMap.java b/src/main/java/bjc/funcdata/IMap.java index dc5ee00..e723507 100644 --- a/src/main/java/bjc/funcdata/IMap.java +++ b/src/main/java/bjc/funcdata/IMap.java @@ -1,8 +1,6 @@ package bjc.funcdata; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Function; +import java.util.function.*; /** * Functional wrapper over map providing some useful things. @@ -15,7 +13,7 @@ import java.util.function.Function; * @param * The type of this map's values. */ -public interface IMap { +public interface IMap extends IFreezable { /** * Execute an action for each entry in the map. * @@ -109,7 +107,7 @@ public interface IMap { /** Delete all the values in the map. */ default void clear() { - keyList().forEach(key -> remove(key)); + keyList().forEach(IMap.this::remove); } /** @@ -151,7 +149,21 @@ public interface IMap { * * @return An extended map. */ - IMap extend(); + default IMap extend() { + 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. + */ + default IMap extend(IMap backer) { + return new ExtendedMap<>(this, backer); + }; /** * Remove the value bound to the key. -- cgit v1.2.3