2010-01-22 4 views
9

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

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

ответ

6

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

+0

Ой, вот что я подозревал, спасибо в любом случае. Я не совсем уверен, какую функцию нужно просить (поскольку всегда есть опасность получить ее :)). PS: Ты так тайна! –

+2

Мне тоже хотелось бы этого. Нет шансов, что это произошло за последние 4 года? –

+1

Увы, нет, мы потеряли веру в то конкретное решение, которое мы раньше думали, что можем освободить. –

0

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

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

+4

Короткий вариант вопроса: «Я просто хочу, чтобы многопрофиль, где я могу видеть значения через API Multiset, а не API Collection». –

Смежные вопросы