Java:多键/值映射

时间:2019-12-03 15:22:20

标签: java collections

我想拥有一个类似于Map的Java集合,但是具有多个键和多个值。

示例:

假设我们有3个键,然后每个元素有3个值。

set (key ("G", "Merc", "SUV"), val ("silver", "400", "100.000"));

val v = get (key ("A4", "Audi", "Sedan"))

这样的馆藏存在于某个图书馆吗?

3 个答案:

答案 0 :(得分:2)

最简单的方法以及我建议的方法是简单地创建2个Java类,一个是键,另一个是值。

class Key {
    String str1, str2, str3;
}

class Value {
    String str1, str2, str3;
}

// later on

Map<Key, Value> map = ...;
map.put(new Key("G", "Merc", "SUV"), new Value("Silver", "400", "100.000"));
map.get(new Key("A4", "Audi", "Sedan"));

当然,这不是唯一的方法,但是它是最容易维护的,并且如果您想在键中添加另一个属性,那么以后也最容易修改。

其他方法包括使用String[]作为键和值List<String>和/或Set<String>。您甚至可以推出自己的Map<T>实现,但同样,可维护性是必须考虑的因素。

答案 1 :(得分:1)

如果要执行此操作,则只需将键和一些定界符“粘合”在一起,并将键设为单个字符串。

Map<String,Value> map = new HashMap<>();

map.put(key("G", "Merc", "SUV"), new Value("Silver", "400", "100.000"));
map.get(key("A4", "Audi", "Sedan"));

public static String key(String...elements) {
    return String.join("-", elements);
}


答案 2 :(得分:1)

或者结合已经提出的答案。

使用自定义类作为键,并使用MultiValueMap作为值。

https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/MultiValuedMap.html