超级MultiValue映射的实现

时间:2015-01-08 14:41:05

标签: java

是否已准备好实施超级MultiValue地图?

我需要一张地图

SuperMap<List<String>, List<String>> superMap

其中key List是键集,值List是值set

keys: {a, b, c}以及任何这些键的值均为values: {1, 2, 3, 4, 5} 这意味着键a应具有值{1, 2, 3, 4, 5}以及键bc

更新了评论中的要求

我需要获得一组的所有键?例如,我需要获取一个类似值的键集合。在这种情况下,我无法使用您的方法map.put("a", value);,因为我需要分组(a, b它是第一组,而c与第二组相关。)

UPD2

我正在寻找一个简单而简洁的解决方案来替换此代码

Map<List<String>, List<String>> ops = new HashMap<List<String>, List<String>>() {{
        put(asList("a", "aaa"), asList("1", "2"));
        put(asList("b", "bbb"), asList("3", "4"));
}};

public static List<String> values(String optionKey) {
    for (List<String> key : ops.keySet()) {
        for (String k : key) {
            if (optionKey.equals(k)) {
                return ops.get(key);
            }
        }
     }
     return Collections.emptyList();
 }

有一些聪明的impl形式任何知名的lib(谷歌番石榴或其他东西)。

1 个答案:

答案 0 :(得分:1)

我认为你的数据结构过于复杂。您只需使用HashMap或类似的实现。

Map<String, List<String>> map = new LinkedHashMap<>();
List<String> value = new ArrayList<>();

// Fill the value list here...

map.put("a", value);
map.put("b", value);
map.put("c", value);