0

複数の値を複数のキーに関連付けることができるコレクションタイプが必要です。理想的には、Mapのように使用しますが、mapは、特定のキーが単一の値を生成することを目的としています。

以下は、これをどのように使用したいかの例です。

@Test
public void multipleItems() {
    Index<String, String> index = new Index<String, String>();
    index.add("key1", "value1");
    index.add("key2", "value2");
    index.add("key1", "value3");
    index.add("key2", "value4");
    index.add("key1", "value5");

    List<String> values = index.get("key2");

    assertEquals(2, values.size());
    assertEquals("value2", values.get(0));
    assertEquals("value4", values.get(1));
}

JVMでの実装を認識していません。これは自分で実装することもできますが、既存の実装を見つけたいと思っています。

推奨事項?

解決

以下の推奨事項に基づいて、私は最終的にグアバを使用しました(そして、より良い解決策を見つけた場合に備えて、これをアプリの残りの部分に公開したくなかったので、それをラップしました。

これらの設定を使用して、gradleスクリプトに含めました。 'com.google.guava:guava-collections:r03'

私の「ラッパー」クラスは次のようになります。

public class Indexes<K, V> {

    private HashMultimap<K, V> keyToValuesMap = HashMultimap.create();

    public void put(K key, V value) {
        this.keyToValuesMap.put(key, value);
    }

    public Set<V> get(K key) {
        return this.keyToValuesMap.get(key);
    }

}
4

3 に答える 3

10

GoogleのJavaライブラリであるGuavaMultimapには、とを含むいくつかのタイプのがListMultimapありSetMultimap、さまざまな実装があります。wikiの記事もあります。

于 2012-04-23T15:00:03.007 に答える
3

他の答えと一緒に行くために、あなたはあなた自身を経由することができます、Map<String, List<String>>あるいはMap<String, Set<String>>あなたがサードパーティのライブラリを使うことができないならば。

于 2012-04-23T15:23:28.657 に答える
0

Javaでマルチマップを使用できます。詳細については、これを参照してください。

http://commons.apache.org/collections/api-3.1/org/apache/commons/collections/MultiMap.html

于 2012-04-23T15:12:03.447 に答える