[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")
);

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다