有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有比三个嵌套映射更好的解决方案来保留相同的功能?

情况是这样的

private Map<String, Map<String, Map<String, String>>> properties;

我希望能够访问所有级别——从内部地图获取Map<String, Map<String, String>>Map<String, String>或者仅仅是String

这能以更好的方式避免这种嵌套结构吗?创建一个能够隐藏实现并提供简单方法的包装器是显而易见的解决方案,但它只是隐藏了主要问题


共 (2) 个答案

  1. # 1 楼答案

    一个干净的解决方案(虽然最初比较麻烦)是normalize您的数据,并将它们加载到内存中database。然后,使用JPA,可以利用所有OneToMany关系,获得共享一个或多个键的对象集合

  2. # 2 楼答案

    我喜欢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的对象,因为它将具有不同的键值

    当然,如果您想存储具有相同索引的多个对象(或者恢复以相同键开头的多个对象,如在搜索Key("a", "a", "a")Key("a", "a", "b)时恢复Key("a", "a", "")),它将不起作用。但是,无论如何,您不应该使用Map,并且可能应该获得一个正确的数据库