带有HashMultiset的Multimap用于值

时间:2010-01-22 17:58:49

标签: java collections guava multimap

我正在尝试为每个键创建一个(基于散列的)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要消除的复杂性之外,我还有其他选择吗?

2 个答案:

答案 0 :(得分:6)

我担心这似乎不可能。您应该提交功能请求。我怀疑那些狡猾的谷歌人有一个漂亮的Multimap,他们可能会发布这些可能对你有帮助的人。

答案 1 :(得分:0)

Multimap interface仅指定get(K)返回Collection<V>。我认为你的代码依赖或假设其他任何东西都是糟糕的设计。

您可以进一步扩展一下您在这里尝试做什么吗?似乎应该有一种更简单的方法来实现它。