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() にラップ) として返すことができるようにしたかったのです。毎回新しいマルチセットにコピーしたくありません。元のコードに戻って、排除することを意味するMap<K, Multiset<V>>複雑さをコードに追加する以外に、他に選択肢はありますか?Multimap

4

2 に答える 2

6

残念ながら、これは不可能のようです。機能リクエストを提出する必要があります。私は、これらの狡猾な Google の人々が、潜在的にあなたを助けるかもしれない、彼らが潜在的にリリースできる気の利いた種類のマルチマップを持っているのではないかとこっそり疑っています。

于 2010-01-22T23:06:31.320 に答える
0

Multimap インターフェイスは、 をget(K)返すことのみを指定しますCollection<V>。コードが他のものに依存したり、想定したりするのは設計が悪いと思います。

ここでやろうとしていることをもう少し詳しく説明していただけますか? それを達成するためのより簡単な方法があるはずです。

于 2010-01-22T18:28:24.973 に答える