diff --git a/src/main/java/ghast/HashMaps.java b/src/main/java/ghast/HashMaps.java new file mode 100644 index 0000000..ae63bcf --- /dev/null +++ b/src/main/java/ghast/HashMaps.java @@ -0,0 +1,156 @@ +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 Map of() { + return new HashMap<>(0); + } + + public static Map of(K k1, V v1) { + return new HashMap() {{ + put(k1, v1); + }}; + } + + public static Map of(K k1, V v1, K k2, V v2) { + return new HashMap() {{ + put(k1, v1); + put(k2, v2); + }}; + } + + public static Map of(K k1, V v1, K k2, V v2, K k3, V v3) { + return new HashMap() {{ + put(k1, v1); + put(k2, v2); + put(k3, v3); + }}; + } + + public static Map of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + return new HashMap() {{ + put(k1, v1); + put(k2, v2); + put(k3, v3); + put(k4, v4); + }}; + } + + public static Map of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + return new HashMap() {{ + put(k1, v1); + put(k2, v2); + put(k3, v3); + put(k4, v4); + put(k5, v5); + }}; + } + + public static Map 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() {{ + put(k1, v1); + put(k2, v2); + put(k3, v3); + put(k4, v4); + put(k5, v5); + put(k6, v6); + }}; + } + + public static Map 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() {{ + put(k1, v1); + put(k2, v2); + put(k3, v3); + put(k4, v4); + put(k5, v5); + put(k6, v6); + put(k7, v7); + }}; + } + + public static Map 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() {{ + 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 Map 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() {{ + 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 Map 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() {{ + 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 Map ofEntries(Map.Entry... entries) { + if (entries == null || entries.length == 0) { + return of(); + } + + Map map = new HashMap<>(entries.length); + for (Map.Entry entry : entries) { + map.put(entry.getKey(), entry.getValue()); + } + + return map; + } + + public static Map.Entry entry(K k, V v) { + return new SimpleEntry<>(k, v); + } + + @AllArgsConstructor + @Getter + @Setter + @EqualsAndHashCode + private static class SimpleEntry implements Map.Entry { + + private final K key; + private V value; + } +}