2010-01-22 8 views
9

Ich versuche, eine (Hash-basierte) Multimap mit einem (Hash-basierten) Multiset von Werten für jeden Schlüssel zu haben. Siehe Beispiel:Multimap mit HashMultiset für Werte

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"); 

Aber dann

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

So scheint es, ich nicht die multiset zugreifen kann ich geschaffen? Ich wollte das als Multiset (in Multisets.unmodifiableMultiset() verpackt) zurückgeben können. Ich möchte es auch nicht jedes Mal in ein neues Multiset kopieren. Habe ich eine andere Möglichkeit, als zurück zu Map<K, Multiset<V>> zu wechseln und in meinen Code die Komplexität hinzuzufügen, die Multimap eliminieren soll?

Antwort

6

Ich fürchte, das scheint nicht möglich zu sein. Sie sollten eine Feature-Anfrage einreichen. Ich habe den schleichenden Verdacht, dass die schlauen Google-Leute eine nette Art von Multimap haben, die sie potenziell veröffentlichen könnten, die Ihnen möglicherweise helfen könnte.

+0

Naja, das habe ich vermutet, danke trotzdem. Ich bin mir nicht sicher, um welches Feature es sich handelt (da es immer die Gefahr gibt, es zu bekommen :)). PS: Du bist manchmal so verschwiegen! –

+2

Ich würde das auch mögen. Keine Chance, dass es in den letzten 4 Jahren passiert ist? –

+1

Leider haben wir den Glauben an die besondere Lösung verloren, von der wir früher dachten, wir könnten sie loslassen. –

0

Die Multimap interface gibt nur an, dass get(K) eine Collection<V> zurückgeben. Ich denke, es wäre ein schlechtes Design für deinen Code, abhängig zu sein oder irgendetwas anderes anzunehmen.

Können Sie ein wenig mehr erweitern, was Sie hier versuchen? Es scheint, als sollte es einen einfacheren Weg geben, es zu erreichen.

+4

Die kurze Version der Frage lautet: "Ich möchte nur eine Multimap, wo ich die Werte über die Multiset API, nicht die Collection API sehen kann." –