我正在尝试为每个键创建一个(基于散列的)Multimap,其中包含一个(基于散列的)Multiset值。参见示例:
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
要消除的复杂性之外,我还有其他选择吗?
答案 0 :(得分:6)
我担心这似乎不可能。您应该提交功能请求。我怀疑那些狡猾的谷歌人有一个漂亮的Multimap,他们可能会发布这些可能对你有帮助的人。
答案 1 :(得分:0)
Multimap interface仅指定get(K)
返回Collection<V>
。我认为你的代码依赖或假设其他任何东西都是糟糕的设计。
您可以进一步扩展一下您在这里尝试做什么吗?似乎应该有一种更简单的方法来实现它。