Merge branch 'dev/maps' into rc/1.13
This commit is contained in:
171
src/main/java/ghast/HashMaps.java
Normal file
171
src/main/java/ghast/HashMaps.java
Normal file
@@ -0,0 +1,171 @@
|
||||
package ghast;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Создание Map как в Java 9+.
|
||||
*/
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public final class HashMaps {
|
||||
|
||||
public static <K, V> Map<K, V> of() {
|
||||
return new HashMap<>(0);
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1) {
|
||||
return new HashMap<K, V>(1) {{
|
||||
put(k1, v1);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) {
|
||||
return new HashMap<K, V>(2) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) {
|
||||
return new HashMap<K, V>(3) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
|
||||
return new HashMap<K, V>(4) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
put(k4, v4);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
|
||||
return new HashMap<K, V>(5) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
put(k4, v4);
|
||||
put(k5, v5);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
|
||||
K k6, V v6) {
|
||||
return new HashMap<K, V>(6) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
put(k4, v4);
|
||||
put(k5, v5);
|
||||
put(k6, v6);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
|
||||
K k6, V v6, K k7, V v7) {
|
||||
return new HashMap<K, V>(7) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
put(k4, v4);
|
||||
put(k5, v5);
|
||||
put(k6, v6);
|
||||
put(k7, v7);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
|
||||
K k6, V v6, K k7, V v7, K k8, V v8) {
|
||||
return new HashMap<K, V>(8) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
put(k4, v4);
|
||||
put(k5, v5);
|
||||
put(k6, v6);
|
||||
put(k7, v7);
|
||||
put(k8, v8);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
|
||||
K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9) {
|
||||
return new HashMap<K, V>(9) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
put(k4, v4);
|
||||
put(k5, v5);
|
||||
put(k6, v6);
|
||||
put(k7, v7);
|
||||
put(k8, v8);
|
||||
put(k9, v9);
|
||||
}};
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
|
||||
K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) {
|
||||
return new HashMap<K, V>(10) {{
|
||||
put(k1, v1);
|
||||
put(k2, v2);
|
||||
put(k3, v3);
|
||||
put(k4, v4);
|
||||
put(k5, v5);
|
||||
put(k6, v6);
|
||||
put(k7, v7);
|
||||
put(k8, v8);
|
||||
put(k9, v9);
|
||||
put(k10, v10);
|
||||
}};
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
public static <K, V> Map<K, V> ofEntries(Map.Entry<? extends K, ? extends V>... entries) {
|
||||
if (entries == null || entries.length == 0) {
|
||||
return of();
|
||||
}
|
||||
|
||||
Map<K, V> map = new HashMap<>(entries.length);
|
||||
for (Map.Entry<? extends K, ? extends V> entry : entries) {
|
||||
map.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
public static <K, V> Map.Entry<K, V> entry(K k, V v) {
|
||||
return new SimpleEntry<>(k, v);
|
||||
}
|
||||
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
private static class SimpleEntry<K, V> implements Map.Entry<K, V> {
|
||||
|
||||
private final K key;
|
||||
private V value;
|
||||
|
||||
@Override
|
||||
public K getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public V getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public V setValue(V value) {
|
||||
V prev = this.value;
|
||||
this.value = value;
|
||||
return prev;
|
||||
}
|
||||
}
|
||||
}
|
||||
182
src/test/java/ghast/HashMapsTest.java
Normal file
182
src/test/java/ghast/HashMapsTest.java
Normal file
@@ -0,0 +1,182 @@
|
||||
package ghast;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class HashMapsTest {
|
||||
|
||||
@Test
|
||||
void of0() {
|
||||
Map<Object, Object> map = HashMaps.of();
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertTrue(map.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of1() {
|
||||
Map<Object, Object> map = HashMaps.of("key1", "val1");
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(1, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of2() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(2, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of3() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(3, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of4() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3",
|
||||
"key4", "val4"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(4, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of5() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3",
|
||||
"key4", "val4",
|
||||
"key5", "val5"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(5, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of6() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3",
|
||||
"key4", "val4",
|
||||
"key5", "val5",
|
||||
"key6", "val6"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(6, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of7() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3",
|
||||
"key4", "val4",
|
||||
"key5", "val5",
|
||||
"key6", "val6",
|
||||
"key7", "val7"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(7, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of8() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3",
|
||||
"key4", "val4",
|
||||
"key5", "val5",
|
||||
"key6", "val6",
|
||||
"key7", "val7",
|
||||
"key8", "val8"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(8, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of9() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3",
|
||||
"key4", "val4",
|
||||
"key5", "val5",
|
||||
"key6", "val6",
|
||||
"key7", "val7",
|
||||
"key8", "val8",
|
||||
"key9", "val9"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(9, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void of10() {
|
||||
Map<Object, Object> map = HashMaps.of(
|
||||
"key1", "val1",
|
||||
"key2", "val2",
|
||||
"key3", "val3",
|
||||
"key4", "val4",
|
||||
"key5", "val5",
|
||||
"key6", "val6",
|
||||
"key7", "val7",
|
||||
"key8", "val8",
|
||||
"key9", "val9",
|
||||
"key10", "val10"
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(10, map.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void ofEntries() {
|
||||
Map<Object, Object> map = HashMaps.ofEntries(
|
||||
HashMaps.entry("key1", "val1"),
|
||||
HashMaps.entry("key2", "val2"),
|
||||
HashMaps.entry("key3", "val3"),
|
||||
HashMaps.entry("key4", "val4"),
|
||||
HashMaps.entry("key5", "val5"),
|
||||
HashMaps.entry("key6", "val6"),
|
||||
HashMaps.entry("key7", "val7"),
|
||||
HashMaps.entry("key8", "val8"),
|
||||
HashMaps.entry("key9", "val9"),
|
||||
HashMaps.entry("key10", "val10"),
|
||||
HashMaps.entry("key11", "val11")
|
||||
);
|
||||
assertNotNull(map);
|
||||
assertTrue(map instanceof HashMap);
|
||||
assertEquals(11, map.size());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user