0

我想知道我怎样才能得到一张我的反转地图的新地图?我的实际地图如下所示:

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()”的方法来反转地图我想将nestedMap的键更改为centralMap的键,反之亦然..所以每个“主题”(如数学、物理, ..) 会有学生和成绩的嵌套地图.. 我怎么能这样做?

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

非常感谢你

4

3 回答 3

2

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

  • Guava 有一个Table类,可以实现您要求的功能
  • 如果您需要更大的灵活性,请考虑使用内存数据库
于 2012-05-07T11:53:52.303 回答
0

我不会为此使用地图。我只会使用一个Collection<PersonGrade>.

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

然后,当您要生成有关“所有科目的米老鼠的所有等级”的报告时,请遍历集合并获取符合该标准的对象。我知道当您处理大量数据时这可能会有点慢。但我真的会试一试。

于 2012-05-07T11:54:26.647 回答
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}}
于 2012-05-07T12:05:07.943 回答