Мультикарта с HashMultiset для значений - PullRequest
9 голосов
/ 22 января 2010

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

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.unmodifiableMultiset ()). Я также не хочу каждый раз копировать его в новый мультисеть. Есть ли у меня какой-либо другой вариант, кроме переключения обратно на Map<K, Multiset<V>> и добавления в мой код сложности, которую Multimap намеревался устранить?

Ответы [ 2 ]

6 голосов
/ 23 января 2010

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

0 голосов
/ 22 января 2010

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

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

...