diff --git a/force-app/main/default/classes/LinkedMap.cls b/force-app/main/default/classes/LinkedMap.cls new file mode 100644 index 00000000..75b6bc7f --- /dev/null +++ b/force-app/main/default/classes/LinkedMap.cls @@ -0,0 +1,35 @@ +public class LinkedMap { + private Map, List> linkedMap; + + public LinkedMap() { + this.linkedMap = new Map, List>(); + } + + public void put(Set keys, List values) { + if (this.linkedMap.containsKey(keys)) { + this.linkedMap.get(keys).addAll(values); + } else { + this.linkedMap.put(keys, values); + } + } + + public List get(Set keys) { + return this.linkedMap.containsKey(keys) ? this.linkedMap.get(keys) : new List(); + } + + public List remove(Set keys) { + return this.linkedMap.remove(keys); + } + + public Boolean containsKey(Set keys) { + return this.linkedMap.containsKey(keys); + } + + public Set> keySet() { + return this.linkedMap.keySet(); + } + + public List> values() { + return this.linkedMap.values(); + } +} diff --git a/force-app/main/default/classes/LinkedMapTests.cls b/force-app/main/default/classes/LinkedMapTests.cls new file mode 100644 index 00000000..081949ad --- /dev/null +++ b/force-app/main/default/classes/LinkedMapTests.cls @@ -0,0 +1,50 @@ +@isTest +public class LinkedMapTests { + @isTest + static void testPut() { + LinkedMap map = new LinkedMap(); + map.put(new Set{'key1'}, new List{'value1'}); + System.assertEquals(map.get(new Set{'key1'}), new List{'value1'}); + + map.put(new Set{'key1'}, new List{'value2'}); + System.assertEquals(map.get(new Set{'key1'}), new List{'value1', 'value2'}); + } + + @isTest + static void testGet() { + LinkedMap map = new LinkedMap(); + map.put(new Set{'key1'}, new List{'value1'}); + System.assertEquals(map.get(new Set{'key1'}), new List{'value1'}); + System.assertEquals(map.get(new Set{'key2'}), null); + } + + @isTest + static void testRemove() { + LinkedMap map = new LinkedMap(); + map.put(new Set{'key1'}, new List{'value1'}); + System.assertEquals(map.remove(new Set{'key1'}), new List{'value1'}); + System.assertEquals(map.remove(new Set{'key1'}), null); + } + + @isTest + static void testContainsKey() { + LinkedMap map = new LinkedMap(); + map.put(new Set{'key1'}, new List{'value1'}); + System.assertEquals(map.containsKey(new Set{'key1'}), true); + System.assertEquals(map.containsKey(new Set{'key2'}), false); + } + + @isTest + static void testKeySet() { + LinkedMap map = new LinkedMap(); + map.put(new Set{'key1'}, new List{'value1'}); + System.assertEquals(map.keySet(), new Set>{new Set{'key1'}}); + } + + @isTest + static void testValues() { + LinkedMap map = new LinkedMap(); + map.put(new Set{'key1'}, new List{'value1'}); + System.assertEquals(map.values(), new List>{new List{'value1'}}); + } +}