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

时间:2012-05-07 11:30:34

标签: java map nested reverse

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

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

nestedMap刚刚在put方法中创建..并且放置一个元素我在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&gt;(); (与我的centralMap相同)并将新创建的地图(例如newCentralMap)中嵌套地图的旧键列表复制为键,作为值,我将复制newNestedMap中centralMap的旧键和值newNestedMap的内容与旧地图上的相同..但我不知道该怎么做,如果我可以复制地图中的列表:S

非常感谢

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

为什么不使用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}}