繁体   English   中英

反转包含另一个嵌套地图的地图

[英]Reverse a map that contains another nested map

我想知道如何获得一张反映我地图的新地图? 我的实际地图看起来像这样:

centralMap = new HashMap<String, Map<String, String>>();
nestedMap = new HashMap<String, String>();

nestedMap刚刚在put-method中创建..并且放置一个元素我在main方法中使用以下内容:

TrueStringMap2D testmap = new TrueStringMap;
testmap.put("Mickey Mouse","Mathematics","1.0");
testmap.put("Mickey Mous","Physics","1.3");
testmap.put("Minnie","Chemistry","2.3");
......

现在我想通过一个名为“flipped()”的方法来反转地图我希望将嵌套地图的键更改为中心地图的键,反之亦然..所以每个“主题”(如数学,物理学) ,..)将有一个学生和成绩的嵌套地图..我怎么能这样做?

我不允许在我的TrueString2D中创建类..我只需要复制一个列表中的centralMap的键,以及另一个List中的嵌套Map的那些,然后创建一个新的映射HashMap>(); (与我的centralMap相同)并将新创建的地图(例如newCentralMap)中嵌套地图的旧键列表复制为键,作为值,我将复制newNestedMap中centralMap的旧键和值newNestedMap的内容与旧地图上的相同..但我不确切知道如何做到这一点,如果我可以复制地图中的列表:S

非常感谢你

使用不同的东西存储您的物品:

  • Guava有一个Table类,它实现了你要求的功能
  • 如果您需要更多灵活性,请考虑使用内存数据库

我不会为此使用地图。 我只想使用Collection<PersonGrade>

class PersonGrade {
   String name;
   String subject;
   Double grade;
}

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

为什么不使用HashMap<String, Map<String, String>>()而不是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));
    }

}

输出

{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}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM