From 413450d3aca1069cb15820b5f7438ac52e186516 Mon Sep 17 00:00:00 2001 From: Emilie Robichaud Date: Tue, 19 Apr 2022 13:49:05 -0400 Subject: [PATCH] Add injectIntoKeyValue to objectPrimitiveMap. Closes #1217. Signed-off-by: Emilie Robichaud --- .../objectObjectPrimitiveToObjectFunction.stg | 30 +++++++++++++++++++ .../resources/api/map/objectPrimitiveMap.stg | 15 ++++++++++ .../resources/api/map/primitiveObjectMap.stg | 4 +-- .../api/map/primitivePrimitiveMap.stg | 4 +-- .../abstractObjectPrimitiveMapTestCase.stg | 19 ++++++++++-- .../abstractPrimitivePrimitiveMapTestCase.stg | 4 +-- 6 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 eclipse-collections-code-generator/src/main/resources/api/block/function/objectObjectPrimitiveToObjectFunction.stg diff --git a/eclipse-collections-code-generator/src/main/resources/api/block/function/objectObjectPrimitiveToObjectFunction.stg b/eclipse-collections-code-generator/src/main/resources/api/block/function/objectObjectPrimitiveToObjectFunction.stg new file mode 100644 index 0000000000..01bbd80c27 --- /dev/null +++ b/eclipse-collections-code-generator/src/main/resources/api/block/function/objectObjectPrimitiveToObjectFunction.stg @@ -0,0 +1,30 @@ +import "copyrightAndOthers.stg" + +targetPath() ::= "org/eclipse/collections/api/block/function/primitive" + +fileName(primitive) ::= "ObjectObjectToObjectFunction" + +class(primitive) ::= << + +>> + +body(type, name, wrapperName) ::= << + + +package org.eclipse.collections.api.block.function.primitive; + +import java.io.Serializable; + +/** + * This file was automatically generated from template file objectObjectPrimitiveToObjectFunction.stg. + * + * @since 11.1. + */ +@FunctionalInterface +public interface ObjectObjectToObjectFunction\ + extends Serializable +{ + R valueOf(T1 object1, T2 object2, value); +} + +>> \ No newline at end of file diff --git a/eclipse-collections-code-generator/src/main/resources/api/map/objectPrimitiveMap.stg b/eclipse-collections-code-generator/src/main/resources/api/map/objectPrimitiveMap.stg index 7dfb6d4cbc..2963c238aa 100644 --- a/eclipse-collections-code-generator/src/main/resources/api/map/objectPrimitiveMap.stg +++ b/eclipse-collections-code-generator/src/main/resources/api/map/objectPrimitiveMap.stg @@ -22,6 +22,7 @@ import org.eclipse.collections.api.block.predicate.primitive.ObjectPredica import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.primitive.ObjectProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; +import org.eclipse.collections.api.block.function.primitive.ObjectObjectToObjectFunction; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.tuple.primitive.ObjectPair; @@ -93,6 +94,20 @@ public interface ObjectMap\ extends Iterable void forEachKeyValue(ObjectProcedure\ procedure); <(flipUniqueValues.(name))(name)> + /** + * Implements the injectInto pattern with each key/value pair of the map. + * @param value to be injected into the map + * @param function to apply to the injected value and key/value pairs + * @return result of injecting the injectedValue into the map + * @since 11.1 + */ + default \ IV injectIntoKeyValue(IV injectedValue, ObjectObjectToObjectFunction\ function) + { + IV[] result = (IV[]) new Object[]{injectedValue}; + this.forEachKeyValue((key, value) -> result[0] = function.valueOf(result[0], key, value)); + return result[0]; + } + /** * Return a copy of this map containing only the key/value pairs that match the predicate. * @param predicate the predicate to determine which key/value pairs in this map should be diff --git a/eclipse-collections-code-generator/src/main/resources/api/map/primitiveObjectMap.stg b/eclipse-collections-code-generator/src/main/resources/api/map/primitiveObjectMap.stg index b0e64b5c0e..499a230046 100644 --- a/eclipse-collections-code-generator/src/main/resources/api/map/primitiveObjectMap.stg +++ b/eclipse-collections-code-generator/src/main/resources/api/map/primitiveObjectMap.stg @@ -1,4 +1,4 @@ -import "copyright.stg" +import "copyrightAndOthers.stg" skipBoolean() ::= "true" @@ -11,7 +11,7 @@ class(primitive) ::= << >> body(type, name) ::= << - + package org.eclipse.collections.api.map.primitive; diff --git a/eclipse-collections-code-generator/src/main/resources/api/map/primitivePrimitiveMap.stg b/eclipse-collections-code-generator/src/main/resources/api/map/primitivePrimitiveMap.stg index 63e30bb9fb..860137e0a4 100644 --- a/eclipse-collections-code-generator/src/main/resources/api/map/primitivePrimitiveMap.stg +++ b/eclipse-collections-code-generator/src/main/resources/api/map/primitivePrimitiveMap.stg @@ -1,4 +1,4 @@ -import "copyright.stg" +import "copyrightAndOthers.stg" skipBooleanKeys() ::= "true" @@ -13,7 +13,7 @@ class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << - + package org.eclipse.collections.api.map.primitive; diff --git a/eclipse-collections-code-generator/src/main/resources/test/map/abstractObjectPrimitiveMapTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/map/abstractObjectPrimitiveMapTestCase.stg index 141b759834..d4854199ee 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/map/abstractObjectPrimitiveMapTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/map/abstractObjectPrimitiveMapTestCase.stg @@ -1,4 +1,4 @@ -import "copyright.stg" +import "copyrightAndOthers.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" import "primitiveEquals.stg" @@ -16,7 +16,7 @@ class(primitive) ::= << >> body(type, name, wrapperName) ::= << - + package org.eclipse.collections.impl.map.primitive; @@ -27,8 +27,9 @@ import org.eclipse.collections.api.block.function.primitive.ToObjectFuncti import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.map.primitive.ImmutableObjectMap; -import org.eclipse.collections.api.map.primitive.ObjectMap; import org.eclipse.collections.api.set.primitive.MutableSet; +import org.eclipse.collections.api.map.primitive.MutableObjectMap; +import org.eclipse.collections.api.map.primitive.ObjectMap; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.factory.primitive.ObjectMaps; @@ -334,6 +335,18 @@ public abstract class AbstractObjectMapTestCase Assert.assertEquals(<(literal.(type))("9")>, sumValue[0]); } + @Test + public void injectIntoKeyValue() + { + ObjectMap\ map0 = this.newWithKeysValues("2", <(literal.(type))("3")>, "4", <(literal.(type))("5")>); + + String result0 = map0.injectIntoKeyValue(new String("1"), (result, eachKey, eachValue) -> result + eachKey + String.valueOf(eachValue)); + Assert.assertTrue(result0, "12<(toStringLiteral.(type))("3")>4<(toStringLiteral.(type))("5")>".equals(result0) || "14<(toStringLiteral.(type))("5")>2<(toStringLiteral.(type))("3")>".equals(result0)); + + ObjectMap copy = map0.injectIntoKeyValue(ObjectMaps.mutable.empty(), MutableObjectMap::withKeyValue); + Assert.assertEquals(map0, copy); + } + @Test public void makeString() { diff --git a/eclipse-collections-code-generator/src/main/resources/test/map/abstractPrimitivePrimitiveMapTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/map/abstractPrimitivePrimitiveMapTestCase.stg index fbd97f53d8..9a05f8cf0c 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/map/abstractPrimitivePrimitiveMapTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/map/abstractPrimitivePrimitiveMapTestCase.stg @@ -1,4 +1,4 @@ -import "copyright.stg" +import "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" @@ -18,7 +18,7 @@ class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << - + package org.eclipse.collections.impl.map.primitive;