Мультикарта с HashMultiset для значений
-
22-09-2019 - |
Вопрос
Я пытаюсь создать мультикарту (на основе хеша) с мультинабором значений (на основе хеша) для каждого ключа.См. пример:
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>
.Я думаю, что было бы плохим дизайном, если бы ваш код зависел или предполагал что-то еще.
Можете ли вы немного подробнее рассказать о том, что вы пытаетесь здесь сделать?Кажется, должен быть более простой способ добиться этого.