Java 反转包含其他嵌套贴图的贴图

Java 反转包含其他嵌套贴图的贴图,java,map,nested,reverse,Java,Map,Nested,Reverse,我想知道如何才能得到一张新地图,那是我的反向地图? 我的实际地图如下所示: centralMap = new HashMap<String, Map<String, String>>(); nestedMap = new HashMap<String, String>(); 现在,我想通过一个名为“flipped()”的方法反转映射 我想将nestedMap的键更改为centralMap的键,反之亦然。。因此,每门“学科”(如数学、物理……)都会有一张学生和

我想知道如何才能得到一张新地图,那是我的反向地图? 我的实际地图如下所示:

centralMap = new HashMap<String, Map<String, String>>();
nestedMap = new HashMap<String, String>();
现在,我想通过一个名为“flipped()”的方法反转映射 我想将nestedMap的键更改为centralMap的键,反之亦然。。因此,每门“学科”(如数学、物理……)都会有一张学生和成绩的地图。。我怎么能这么做


我不允许在TrueString2D中创建类。。我只需要复制列表中centralMap的键,以及另一个列表中nestedMap的键,然后创建一个新的映射HashMap>();(与我的centralMap相同)并将新创建映射(例如newCentralMap)中nestedMap的旧键列表复制为键和值,我将在newNestedMap中复制centralMap的旧键,并且newNestedMap的值与旧映射上的值相同。。但是我不知道该怎么做,如果我能在地图上复制一个列表:S


非常感谢您使用不同的方式存储您的物品:

  • Guava有一个类,它实现了您要求的功能
  • <> LI>如果需要更大的灵活性,请考虑内存数据库
      我不会用地图来做这个。我只会使用
      集合

      然后,当您想要生成一个关于“所有主题上的米老鼠的所有等级”的报告时,迭代集合并获取符合该标准的对象。
      我知道在处理大量数据时,这可能有点慢。但是我真的想试试。

      为什么不使用
      HashMap()
      而不是
      TrueStringMap2D

      import java.util.HashMap;
      import java.util.Map;
      
      public class Flip {
      
      
          public static Map <String, Map<String, String>> flip(Map <String, Map<String, String>> map){
              Map <String, Map<String, String>> result = new HashMap<String, Map<String, String>>();
              for (String key : map.keySet()){
                  for (String key2 : map.get(key).keySet()){
                      if (!result.containsKey(key2)){
                          result.put(key2, new HashMap<String, String>());
                      }
      
                      result.get(key2).put(key, map.get(key).get(key2));
                  }
              }
      
      
              return result;
          }
      
          /**
           * @param args
           */
          public static void main(String[] args) {
              Map <String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
      
              map.put("Mickey", new HashMap<String, String>());
              map.get("Mickey").put("Physics", "1.1");
              map.get("Mickey").put("Maths", "1.2");
      
              map.put("Minnie", new HashMap<String, String>());
              map.get("Minnie").put("Physics", "1.1");
              map.get("Minnie").put("Chemistry", "1.3");
      
              System.out.println(map);
      
              System.out.println(flip(map));
          }
      
      }
      

      TrueStringMap2D
      这个类是什么?它实现了什么接口?@bpgergo我认为它没有实现收集接口。它的
      put()
      方法似乎只是委托给内部映射。我为二维映射创建了它。。它只需重新定义法线贴图的方法,就可以为每个条目使用key1、key2和value的贴图获取这些方法。。我现在正在实现TrueString2D:-)我只想要一个方法,它是flipped(),它将使用nestedMap的键反转centralMap的键。。我是否应该将nestedMap的键集复制到一个列表中,也复制一个centralMap,然后将这两个键集反向放置到一个新的映射中?我应该如何实现反转键的flipped()方法?我希望当你看到我如何填写我的条目时,你能理解这个问题。谢谢泽勒布。您还应该发布
      TrueStringMap2D
      的源代码。没有这一点,很难回答这个问题。为什么不使用
      HashMap()
      而不是
      TrueStringMap2D
      ?它是我的类TrueString2D的基础。。它创建了这样一张地图:)我不允许在TrueString2D中创建类。。我只需要复制列表中centralMap的键,以及另一个列表中nestedMap的键,然后创建一个新映射
      HashMap()(与我的centralMap相同)并将新创建的映射(例如newCentralMap)中nestedMap的旧键列表复制为键,并作为值,我将复制newNestedMap中centralMap的旧键,并且newNestedMap的值与旧映射上的值相同。。但是我不知道该怎么做,如果我能在地图上复制一个列表:我不允许使用这个。。我必须实现我的TrueString2D:Sthanks bpgergo。。但是flipped()的retrun类型必须是Sting2D。。我是否应该编辑该问题以放置接口StringMap2D和我实现的类TrueString2D1)为什么必须使用该类:
      TrueStringMap2D
      ?2) 如果你真的要使用它,请发布课程的完整来源。因为这是一个家庭作业:-)谢谢,收到了;)我刚刚修改了你的解决方案!谢谢!!!
      class PersonGrade {
         String name;
         String subject;
         Double grade;
      }
      
      import java.util.HashMap;
      import java.util.Map;
      
      public class Flip {
      
      
          public static Map <String, Map<String, String>> flip(Map <String, Map<String, String>> map){
              Map <String, Map<String, String>> result = new HashMap<String, Map<String, String>>();
              for (String key : map.keySet()){
                  for (String key2 : map.get(key).keySet()){
                      if (!result.containsKey(key2)){
                          result.put(key2, new HashMap<String, String>());
                      }
      
                      result.get(key2).put(key, map.get(key).get(key2));
                  }
              }
      
      
              return result;
          }
      
          /**
           * @param args
           */
          public static void main(String[] args) {
              Map <String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
      
              map.put("Mickey", new HashMap<String, String>());
              map.get("Mickey").put("Physics", "1.1");
              map.get("Mickey").put("Maths", "1.2");
      
              map.put("Minnie", new HashMap<String, String>());
              map.get("Minnie").put("Physics", "1.1");
              map.get("Minnie").put("Chemistry", "1.3");
      
              System.out.println(map);
      
              System.out.println(flip(map));
          }
      
      }
      
      {Minnie={Physics=1.1, Chemistry=1.3}, Mickey={Maths=1.2, Physics=1.1}}
      {Maths={Mickey=1.2}, Physics={Minnie=1.1, Mickey=1.1}, Chemistry={Minnie=1.3}}