Подтвердить что ты не робот

Лучший способ статической инициализации Карт в коллекциях google

Каков наилучший способ статической инициализации модифицируемых Карт? Я нашел только

ImmutableMap.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)

Но этот способ создал неизменяемую карту и содержит фиксированный список параметров.

4b9b3361

Ответ 1

Если вам нужен способ кода of, вы можете использовать:

myMap = Maps.newHashMap(ImmutableMap.of(k1, v1, k2, v2...));

Кроме того, ImmutableMap.Builder - другой выбор для создания Карты из сложного источника:

myMap = Maps.newHashMap(new ImmutableMap.Builder<K, V>()
                   .put(k1, v1) //One k-v pair 
                   .putAll(otherMap) //From other Map
                   .put(Maps.immutableEntry(k2, v3)) //From a Map Entry
                   ...
                   .build());

Плюс: мой код не является оригинальным намерением ImmutableMap. Если Нава настаивает на использовании библиотеки Guava;)

Ответ 2

На самом деле вам не нужна статическая инициализация. Что случилось со следующим?

Map<K, V> map = Maps.newHashMap();
map.put(k1, v1);
map.put(k2, v2);
// More put() calls

// map is now ready to use.

При необходимости вы можете создать вспомогательный метод, но вы можете создавать только так много разных версий (для 1 записи, 2 записи и т.д.). В какой-то момент это больше не помогает.

Ответ 3

Нет смысла иметь это для изменчивых коллекций. Единственная причина, по которой я могу думать, это то, что вы хотите иметь сокращение для этого, создавая изначально небольшие изменчивые карты. Напиши свои собственные утилиты, если вам это нужно часто:

public static <K,V> HashMap<K,V> newHashMap(K k1, V v1) {
    HashMap<K, V> map = new HashMap<>();
    map.put(k1, v1);
    return map;
}

public static <K,V> HashMap<K,V> newHashMap(K k1, V v1, K k2, V v2) {
    HashMap<K, V> map = new HashMap<>();
    map.put(k1, v1);
    map.put(k2, v2);
    return map;
}

...

Переопределите его, если вы считаете, что он все еще доступен для чтения. Из-за смешения с ключами и ценностями это становится нечитаемым быстро, на мой взгляд, даже при правильном форматировании. Guava ребята остановили это на 5 пар ключ-значение, что слишком много imho.