diff --git a/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/BaseClassUserCache.java b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/BaseClassUserCache.java new file mode 100644 index 0000000000..1449727efc --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/BaseClassUserCache.java @@ -0,0 +1,24 @@ +package com.baeldung.map.multikey; + +import java.util.HashMap; +import java.util.Map; + +public class BaseClassUserCache { + private final Map cache = new HashMap<>(); + + public User getById(String id) { + return cache.get(id); + } + + public User getById(Long id) { + return cache.get(id); + } + + public void storeById(String id, User user) { + cache.put(id, user); + } + + public void storeById(Long id, User user) { + cache.put(id, user); + } +} diff --git a/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/MultipleMapsUserCache.java b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/MultipleMapsUserCache.java new file mode 100644 index 0000000000..6b7e56f209 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/MultipleMapsUserCache.java @@ -0,0 +1,25 @@ +package com.baeldung.map.multikey; + +import java.util.HashMap; +import java.util.Map; + +public class MultipleMapsUserCache { + private final Map stringCache = new HashMap<>(); + private final Map longCache = new HashMap<>(); + + public User getById(String id) { + return stringCache.get(id); + } + + public User getById(Long id) { + return longCache.get(id); + } + + public void storeById(String id, User user) { + stringCache.put(id, user); + } + + public void storeById(Long id, User user) { + longCache.put(id, user); + } +} diff --git a/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/User.java b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/User.java new file mode 100644 index 0000000000..392587d305 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/User.java @@ -0,0 +1,13 @@ +package com.baeldung.map.multikey; + +public class User { + private final String name; + + public User(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/WrapperClassUserCache.java b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/WrapperClassUserCache.java new file mode 100644 index 0000000000..3ce920ead1 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/WrapperClassUserCache.java @@ -0,0 +1,42 @@ +package com.baeldung.map.multikey; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public class WrapperClassUserCache { + private Map cache = new HashMap<>(); + + public User getById(CacheKey key) { + return cache.get(key); + } + + public void storeById(CacheKey key, User user) { + cache.put(key, user); + } + + public static class CacheKey { + private final Object value; + + public CacheKey(String value) { + this.value = value; + } + + public CacheKey(Long value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CacheKey cacheKey = (CacheKey) o; + return value.equals(cacheKey.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + } +} diff --git a/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/WrapperInterfaceUserCache.java b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/WrapperInterfaceUserCache.java new file mode 100644 index 0000000000..586a1bdee7 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/main/java/com/baeldung/map/multikey/WrapperInterfaceUserCache.java @@ -0,0 +1,62 @@ +package com.baeldung.map.multikey; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public class WrapperInterfaceUserCache { + private Map cache = new HashMap<>(); + + public User getById(CacheKey key) { + return cache.get(key); + } + + public void storeById(CacheKey key, User user) { + cache.put(key, user); + } + + public interface CacheKey { + } + + public static class StringCacheKey implements CacheKey{ + private final String value; + + public StringCacheKey(String value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + StringCacheKey that = (StringCacheKey) o; + return value.equals(that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + } + + public static class LongCacheKey implements CacheKey { + private final Long value; + + public LongCacheKey(Long value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LongCacheKey that = (LongCacheKey) o; + return value.equals(that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + } +} diff --git a/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/BaseClassUserCacheUnitTest.java b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/BaseClassUserCacheUnitTest.java new file mode 100644 index 0000000000..6a35e4c10a --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/BaseClassUserCacheUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.map.multikey; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BaseClassUserCacheUnitTest { + private BaseClassUserCache cache = new BaseClassUserCache(); + + @BeforeEach + public void setup() { + cache.storeById("a", new User("User A")); + cache.storeById("b", new User("User B")); + cache.storeById(3L, new User("User 3")); + cache.storeById(4L, new User("User 4")); + } + + @Test + public void getByString() { + User user = cache.getById("b"); + assertNotNull(user); + assertEquals("User B", user.getName()); + } + + @Test + public void getByLong() { + User user = cache.getById(4L); + assertNotNull(user); + assertEquals("User 4", user.getName()); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/MultipleMapsUserCacheUnitTest.java b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/MultipleMapsUserCacheUnitTest.java new file mode 100644 index 0000000000..0b8473c0df --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/MultipleMapsUserCacheUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.map.multikey; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class MultipleMapsUserCacheUnitTest { + private MultipleMapsUserCache cache = new MultipleMapsUserCache(); + + @BeforeEach + public void setup() { + cache.storeById("a", new User("User A")); + cache.storeById("b", new User("User B")); + cache.storeById(3L, new User("User 3")); + cache.storeById(4L, new User("User 4")); + } + + @Test + public void getByString() { + User user = cache.getById("b"); + assertNotNull(user); + assertEquals("User B", user.getName()); + } + + @Test + public void getByLong() { + User user = cache.getById(4L); + assertNotNull(user); + assertEquals("User 4", user.getName()); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/WrapperClassUserCacheUnitTest.java b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/WrapperClassUserCacheUnitTest.java new file mode 100644 index 0000000000..caff7ef050 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/WrapperClassUserCacheUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.map.multikey; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class WrapperClassUserCacheUnitTest { + private WrapperClassUserCache cache = new WrapperClassUserCache(); + + @BeforeEach + public void setup() { + cache.storeById(new WrapperClassUserCache.CacheKey("a"), new User("User A")); + cache.storeById(new WrapperClassUserCache.CacheKey("b"), new User("User B")); + cache.storeById(new WrapperClassUserCache.CacheKey(3L), new User("User 3")); + cache.storeById(new WrapperClassUserCache.CacheKey(4L), new User("User 4")); + } + + @Test + public void getByString() { + User user = cache.getById(new WrapperClassUserCache.CacheKey("b")); + assertNotNull(user); + assertEquals("User B", user.getName()); + } + + @Test + public void getByLong() { + User user = cache.getById(new WrapperClassUserCache.CacheKey(4L)); + assertNotNull(user); + assertEquals("User 4", user.getName()); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/WrapperInterfaceUserCacheUnitTest.java b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/WrapperInterfaceUserCacheUnitTest.java new file mode 100644 index 0000000000..211e6aa182 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-5/src/test/java/com/baeldung/map/multikey/WrapperInterfaceUserCacheUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.map.multikey; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class WrapperInterfaceUserCacheUnitTest { + private WrapperInterfaceUserCache cache = new WrapperInterfaceUserCache(); + + @BeforeEach + public void setup() { + cache.storeById(new WrapperInterfaceUserCache.StringCacheKey("a"), new User("User A")); + cache.storeById(new WrapperInterfaceUserCache.StringCacheKey("b"), new User("User B")); + cache.storeById(new WrapperInterfaceUserCache.LongCacheKey(3L), new User("User 3")); + cache.storeById(new WrapperInterfaceUserCache.LongCacheKey(4L), new User("User 4")); + } + + @Test + public void getByString() { + User user = cache.getById(new WrapperInterfaceUserCache.StringCacheKey("b")); + assertNotNull(user); + assertEquals("User B", user.getName()); + } + + @Test + public void getByLong() { + User user = cache.getById(new WrapperInterfaceUserCache.LongCacheKey(4L)); + assertNotNull(user); + assertEquals("User 4", user.getName()); + } +} \ No newline at end of file