Конвертировать карту в ImmutableSetMultimap

1

Я пытаюсь преобразовать следующий фрагмент кода, чтобы использовать ImmutableSetMultimap, но у меня возникают проблемы, когда я пытаюсь выполнить map.get(...).add(...) потому что он неизменен. Есть простой способ сделать это?

List<MyObject> objects   

Map<Long, Set<Key>> map = new HashMap<Long, Set<Key>>();
for (MyObject entry : objects) {
    if (map.containsKey(entry.getId())) {
        map.get(entry.getId()).add(entry.getKey());
    } else {
        Set<Key> newSet = new HashSet<Key>();
        newSet.add(entry.getKey());
        map.put(entry.getId(), newSet);
    }
}
  • 0
    Object не имеет getKey()
  • 0
    Как это вообще компилируется? Object не имеет getKey или getId .
Показать ещё 4 комментария
Теги:
immutability
guava
map

1 ответ

1
Лучший ответ

У ImmutableSetMultimap есть построитель:

ImmutableSetMulitimap.Builder<Key, Value> builder = ImmutableSetMulitimap.builder();
for (Entry<Key, Value> entry : entries) {
    builder.put(entry.getKey(), entry.getValue());
}
ImmutableSetMulitimap<Key, Value> map = builder.build();

Для получения дополнительной информации см. Javadoc

  • 0
    Мои значения карты не Key, а Set <Key>
  • 0
    ImmutableSetMultimap помещает значения в наборы. Если вы поместите несколько значений с одним и тем же ключом, то есть builder.put(key, value) , тогда все значения будут в наборе. Если вы сделаете map.get(key) вы получите набор значений. Пожалуйста, перейдите по ссылке на Javadoc и найдите get(K key)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню