Вопрос

Я пытаюсь создать мультикарту (на основе хеша) с мультинабором значений (на основе хеша) для каждого ключа.См. пример:

Multimap<Object, Object> mmap = Multimaps.newMultimap(
    Maps.<Object, Collection<Object>>newHashMap(), 
    new Supplier<Collection<Object>>() {
  public Collection<Object> get() {
    return HashMultiset.create();
  }
});
mmap.put("1", "2");

Но потом,

System.out.println(mmap.get("1") instanceof Multiset<?>); 
//false, the returned collection is not a HashMultiset,
//but a (private) WrappedCollection

Кажется, я не могу получить доступ к созданному мной мультинабору?Я хотел иметь возможность вернуть это как Multiset (завернутое в Multisets.unmodifyingMultiset()).Я также не хочу каждый раз копировать его в новый Multiset.Есть ли у меня другой вариант, кроме как вернуться к Map<K, Multiset<V>> и добавив в свой код сложность, которая Multimap имелось в виду устранить?

Это было полезно?

Решение

Боюсь, это кажется невозможным.Вам следует подать запрос на добавление функции.У меня есть смутное подозрение, что у этих хитрых ребят из Google есть изящная разновидность Multimap, которую они потенциально могут выпустить и которая потенциально может вам помочь.

Другие советы

А Мультикартовый интерфейс только указывает, что get(K) вернуть Collection<V>.Я думаю, что было бы плохим дизайном, если бы ваш код зависел или предполагал что-то еще.

Можете ли вы немного подробнее рассказать о том, что вы пытаетесь здесь сделать?Кажется, должен быть более простой способ добиться этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top