Skip to content

Commit 44f0fe6

Browse files
author
burdo
committed
introduce StringKeyMap
admitted, HashCodeMap was a shitty idea
1 parent a00a331 commit 44f0fe6

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.comroid.api.map;
2+
3+
import lombok.Value;
4+
import org.comroid.api.Polyfill;
5+
import org.jspecify.annotations.NonNull;
6+
import org.jspecify.annotations.Nullable;
7+
8+
import java.util.Collection;
9+
import java.util.Map;
10+
import java.util.Set;
11+
import java.util.concurrent.ConcurrentHashMap;
12+
13+
@Value
14+
public class StringKeyMap<V> implements Map<CharSequence, V> {
15+
Map<String, V> innerMap;
16+
17+
public StringKeyMap() {
18+
this(Map.of());
19+
}
20+
21+
public StringKeyMap(Map<? extends CharSequence, V> copy) {
22+
this(new ConcurrentHashMap<>(), copy);
23+
}
24+
25+
public StringKeyMap(Map<String, V> innerMap, Map<? extends CharSequence, V> copy) {
26+
this.innerMap = innerMap;
27+
28+
putAll(copy);
29+
}
30+
31+
@Override
32+
public int size() {
33+
return innerMap.size();
34+
}
35+
36+
@Override
37+
public boolean isEmpty() {
38+
return innerMap.isEmpty();
39+
}
40+
41+
@Override
42+
public boolean containsKey(Object key) {
43+
return innerMap.containsKey(key.toString());
44+
}
45+
46+
@Override
47+
public boolean containsValue(Object value) {
48+
return innerMap.containsValue(value);
49+
}
50+
51+
@Override
52+
public V get(Object key) {
53+
return innerMap.get(key.toString());
54+
}
55+
56+
@Override
57+
public @Nullable V put(CharSequence key, V value) {
58+
return innerMap.put(key.toString(), value);
59+
}
60+
61+
@Override
62+
public V remove(Object key) {
63+
return innerMap.remove(key.toString());
64+
}
65+
66+
@Override
67+
public void putAll(@NonNull Map<? extends CharSequence, ? extends V> other) {
68+
other.forEach(this::put);
69+
}
70+
71+
@Override
72+
public void clear() {
73+
innerMap.clear();
74+
}
75+
76+
@Override
77+
public @NonNull Set<CharSequence> keySet() {
78+
return Polyfill.uncheckedCast(innerMap.keySet());
79+
}
80+
81+
@Override
82+
public @NonNull Collection<V> values() {
83+
return innerMap.values();
84+
}
85+
86+
@Override
87+
public @NonNull Set<Entry<CharSequence, V>> entrySet() {
88+
return Polyfill.uncheckedCast(innerMap.entrySet());
89+
}
90+
}

0 commit comments

Comments
 (0)