[Java]Map.of(), Map.ofEntries 데이터 초기화
Java 9부터 Map.of(), Map.ofEntries를 사용하여 간단하게 맵을 초기화할 수 있다.
static <K, V> Map<K, V> of() { return ImmutableCollections.emptyMap(); } static <K, V> Map<K, V> of(K k1, V v1) { return new ImmutableCollections.Map1<>(k1, v1); } .... 중략 ... 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 ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6, k7, v7, k8, v8, k9, v9, k10, v10); } static <K, V> Map<K, V> ofEntries(Entry<? extends K, ? extends V>... entries) { if (entries.length == 0) { // implicit null check of entries array return ImmutableCollections.emptyMap(); } else if (entries.length == 1) { // implicit null check of the array slot return new ImmutableCollections.Map1<>(entries[0].getKey(), entries[0].getValue()); } else { Object[] kva = new Object[entries.length << 1]; int a = 0; for (Entry<? extends K, ? extends V> entry : entries) { // implicit null checks of each array slot kva[a++] = entry.getKey(); kva[a++] = entry.getValue(); } return new ImmutableCollections.MapN<>(kva); } }
Map.of와 Map.ofEntries는 ImmutableCollections 를 반환한다는 것에 주의하자.
한번 초기화하면 map.put()을 이용하여 값을 추가할 수 없다. 추가할 경우 java.lang.UnsupportedOperationException 가 발생한다.
사용방법은 아래와 같다. (key1, value1, key2, value2 … key10, value10)
Map<Integer, String> map = Map.of(1, "name1", 2, "name2");
최대 10개까지만 초기화하여 사용할 수 있다.
10개 이상을 초기화할 경우 Map.ofEntries를 사용하면 된다.
Map<Integer, String> entriesMap = Map.ofEntries( Map.entry(1, "name1"), Map.entry(2, "name2"), Map.entry(3, "name3"), Map.entry(4, "name4"), Map.entry(5, "name5"), Map.entry(6, "name6"), Map.entry(7, "name7"), Map.entry(8, "name8"), Map.entry(9, "name9"), Map.entry(10, "name10"), Map.entry(11, "name11") );
최신 댓글