簡體   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