diff --git a/java-collections-maps-3/src/main/java/com/baeldung/map/invert/InvertHashMapExample.java b/java-collections-maps-3/src/main/java/com/baeldung/map/invert/InvertHashMapExample.java new file mode 100644 index 0000000000..a203fd17c4 --- /dev/null +++ b/java-collections-maps-3/src/main/java/com/baeldung/map/invert/InvertHashMapExample.java @@ -0,0 +1,59 @@ +package com.baeldung.map.invert; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +public class InvertHashMapExample { + + public static void main(String[] args) { + + Map map = new HashMap<>(); + map.put("first", 1); + map.put("second", 2); + System.out.println(map); + + invertMapUsingForLoop(map); + invertMapUsingStreams(map); + invertMapUsingMapper(map); + + map.put("two", 2); + invertMapUsingGroupingBy(map); + } + + public static Map invertMapUsingForLoop(Map map) { + Map inversedMap = new HashMap(); + for (Entry entry : map.entrySet()) { + inversedMap.put(entry.getValue(), entry.getKey()); + } + System.out.println(inversedMap); + return inversedMap; + } + + public static Map invertMapUsingStreams(Map map) { + Map inversedMap = map.entrySet() + .stream() + .collect(Collectors.toMap(Entry::getValue, Entry::getKey)); + System.out.println(inversedMap); + return inversedMap; + } + + public static Map invertMapUsingMapper(Map sourceMap) { + Map inversedMap = sourceMap.entrySet() + .stream() + .collect(Collectors.toMap(Entry::getValue, Entry::getKey, (oldValue, newValue) -> oldValue)); + System.out.println(inversedMap); + return inversedMap; + } + + public static Map> invertMapUsingGroupingBy(Map map) { + Map> inversedMap = map.entrySet() + .stream() + .collect(Collectors.groupingBy(Map.Entry::getValue, Collectors.mapping(Map.Entry::getKey, Collectors.toList()))); + System.out.println(inversedMap); + return inversedMap; + } + +} diff --git a/java-collections-maps-3/src/test/java/com/baeldung/map/invert/InvertHashMapExampleTest.java b/java-collections-maps-3/src/test/java/com/baeldung/map/invert/InvertHashMapExampleTest.java new file mode 100644 index 0000000000..aecfbfe675 --- /dev/null +++ b/java-collections-maps-3/src/test/java/com/baeldung/map/invert/InvertHashMapExampleTest.java @@ -0,0 +1,60 @@ +package com.baeldung.map.invert; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class InvertHashMapExampleTest { + + Map sourceMap; + + @BeforeAll + void setup() { + sourceMap = new HashMap<>(); + sourceMap.put("Sunday", 0); + sourceMap.put("Monday", 1); + } + + @Test + void test1_invertMapUsingForLoop() { + Map inversedMap = InvertHashMapExample.invertMapUsingForLoop(sourceMap); + assertNotNull(inversedMap); + assertEquals(inversedMap.size(), 2); + assertEquals("Monday", inversedMap.get(1)); + } + + @Test + void test2_invertMapUsingStreams() { + Map inversedMap = InvertHashMapExample.invertMapUsingStreams(sourceMap); + assertNotNull(inversedMap); + assertEquals(inversedMap.size(), 2); + assertEquals("Monday", inversedMap.get(1)); + } + + @Test + void test3_invertMapUsingMapper() { + Map inversedMap = InvertHashMapExample.invertMapUsingMapper(sourceMap); + assertNotNull(inversedMap); + assertEquals(inversedMap.size(), 2); + assertEquals("Monday", inversedMap.get(1)); + } + + @Test + void test4_invertMapUsingGroupingBy() { + sourceMap.put("monday", 1); + Map> inversedMap = InvertHashMapExample.invertMapUsingGroupingBy(sourceMap); + assertNotNull(inversedMap); + assertEquals(inversedMap.size(), 2); + assertTrue(inversedMap.get(1) instanceof List); + } + +}