9

我正在尝试为每个键创建一个(基于哈希的)多重映射,其中包含一个(基于哈希的)多重值集。请参阅示例:

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旨在消除的复杂性之外,我还有其他选择吗?

4

2 回答 2

6

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

于 2010-01-22T23:06:31.320 回答
0

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

您能否进一步扩展您在这里尝试做的事情?似乎应该有一种更简单的方法来完成它。

于 2010-01-22T18:28:24.973 回答