BAEL-5686: Implementing a Map with Multiple Keys (#12531)
This commit is contained in:
parent
c1ffc6c2c5
commit
d083a20aa9
|
@ -0,0 +1,24 @@
|
|||
package com.baeldung.map.multikey;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class BaseClassUserCache {
|
||||
private final Map<Object, User> 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);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.baeldung.map.multikey;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class MultipleMapsUserCache {
|
||||
private final Map<String, User> stringCache = new HashMap<>();
|
||||
private final Map<Long, User> 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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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<CacheKey, User> 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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<CacheKey, User> 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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue