1

たとえば、コードは次のようになります。少し複雑です。このコンテキストで Google の guava lib を使用してコードをクリーンアップするにはどうすればよいですか?

@Test
public void testMap2() {
    Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
    addToMap(map, "cib", "1004", "2");
    addToMap(map, "cib", "1005", "3");
    addToMap(map, "cib", "1006", "1");
    addToMap(map, "cib", "1007", "5");

    addToMap(map, "icbc", "1004", "2");
    addToMap(map, "icbc", "1005", "3");
    addToMap(map, "icbc", "1006", "1");
    addToMap(map, "icbc", "1007", "5");
    System.out.println(map);

}

private void addToMap(Map<String, Map<String, String>> map, String key, String name, String value) {
    if(map.containsKey(key)) {
        map.get(key).put(name, value);
    } else {
        Map<String, String> map1 = new HashMap<String, String>();
        map1.put(name, value);
        map.put(key, map1);
    }
}
4

1 に答える 1

13

はい、それは呼ばれTableます:

行キーと列キーと呼ばれるキーの順序付けられたペアを単一の値に関連付けるコレクション。テーブルはまばらで、行キーと列キーのペアのごく一部のみが対応する値を保持している場合があります。
特定の行キーに対応するマッピングは、キーが列である Map と見なすことができます。逆も利用可能で、列を行キー/値マップに関連付けます。一部の実装では、列キーによるデータ アクセスは、行キーによるデータ アクセスよりもサポートされる操作が少なくなったり、パフォーマンスが低下したりする場合があることに注意してください。

いくつかの実装があります:

Guava new collection types、具体的にはコード例について説明している Wikiも参照してください。

Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4);
weightedGraph.put(v1, v3, 20);
weightedGraph.put(v2, v3, 5);

weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5

これは、あなたが望むものを達成するためのクリーンな方法を示しています。

PS Guava Wiki はあなたの友達です!

于 2013-07-10T14:14:26.850 に答える