情况如下
private Map<String, Map<String, Map<String, String>>> properties;
我希望能够访问所有级别 - 从内部地图获取Map<String, Map<String, String>>
,Map<String, String>
或只是String
。
这可以更好地避免这种嵌套结构吗?创建一个隐藏实现并提供简单方法的包装器是显而易见的解决方案,但它只是隐藏了主要问题。
答案 0 :(得分:6)
我喜欢Key
方法。
public class Key {
private String keyA;
private String keyB;
private String keyC;
public Key(String a, String b, String c) {
keyA = "".equals(a) ? null : a;
keyB = "".equals(b) ? null : b;
keyC = "".equals(c) ? null : c;
}
public String getKey(){
return keyA + keyB + keyC;
}
// equals() can be implemented using getKey()
}
然后:
Map<Key, String> map = new HashMap<Key, String>();
map.put(new Key("a", "",""), "only one key");
map.put(new Key("a", "b", "c"), "all keys");
请注意,您只需要一张地图,并且仍然可以获得仅包含keyA
的对象,因为它将具有不同的键值。
当然,如果您想要存储具有相同索引的多个对象(或者在搜索{{1时)恢复以相同键开头的多个对象,例如在recover Key("a", "a", "a")
和Key("a", "a", "b)
中它不会起作用。但是,你不应该使用Key("a", "a", "")
,并且应该得到一个合适的数据库。
答案 1 :(得分:0)
您可以考虑查看Google Guavas Collection课程 - 也许您可以找到一个合适的实施方案,您可以使用“开箱即用”而不是自己动手?
答案 2 :(得分:0)