2012-05-07 106 views
0

我想知道如何獲得一張新地圖,即我的反轉地圖? 我實際的地圖看起來像這樣:反轉包含另一個嵌套地圖的地圖

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

的nestedMap只是在PUT方法創建..並把我使用的主要方法如下元素:

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

現在我想要通過我命名爲「flip()」的方法來反轉地圖,我想將嵌套地圖的Keys更改爲centralMap的Keys,反之亦然。因此,每個「主題」(如數學,物理, ..)將有一個nestedMap的學生和成績..我怎麼能這樣做?

我不允許在我的TrueString2D中創建類。我只需要複製列表中的centralMap的Keys或另一個List中的nestedMap的Keys,然後創建一個新的地圖HashMap>(); (和我的centralMap一樣),並將新創建的地圖中的嵌套地圖的舊鍵列表(例如newCentralMap)作爲關鍵字複製,並且作爲值,我將在newNestedMap中複製centralMap的舊鍵以及值在newNestedMap的是一樣的老地圖上的那些..但我不知道到底該怎麼做,如果我可以複製在一張地圖列表:S

三江源verymuch

+2

'TrueStringMap2D'這是什麼課?它實現了什麼界面? – bpgergo

+0

@bpgergo我不認爲它實現了Collection接口。看起來它的'put()'方法只是代表內部映射。 – Kai

+0

我創建了一個2D維度地圖..它只是重新定義了一個普通地圖的方法,以獲得這些方法的地圖與key1,key2和值爲每個條目..我現在正在實施TrueString2D :-)我只是想方法,翻轉(),這將顛倒中央映射的鍵與嵌套映射的鍵。我應該複製nestedMap的keySet在列表中的一箇中心映射,然後把它們顛倒一張新地圖?我應該如何實現這個反轉鍵的flip()方法?當你看到我如何放入我的作品時,我希望你能理解這個問題。 – ZelelB

回答

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}} 
+0

感謝bpgergo ..但翻轉類型的flip()必須是Sting2D。 。我應該編輯問題以將接口StringMap2D和即時消息類實現ting,TrueString2D – ZelelB

+0

請你看一下嗎? – ZelelB

+0

1)爲什麼你必須使用這個類:'TrueStringMap2D'? 2)如果您真的需要使用它,請發佈課程的完整源代碼。 – bpgergo

2

使用不同的東西用於存儲你的項目:

  • 番石榴具有Table類,它實現你所要求的
  • 功能
  • 如果您需要更大的靈活性,請考慮內存數據庫
+0

我不允許使用..我必須實現我的TrueString2D:S – ZelelB

0

我不會爲此使用映射。我只會用Collection<PersonGrade>

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

然後,當你想生成一個關於「所有科目所有等級米老鼠」報告遍歷集合,並採取哪些符合這一條件的對象。 我知道在處理大量數據時這可能會有點慢。但我真的會試一試。

+0

即時通訊不允許在我的TrueString2D中創建類..我只需要將列表中的centralMap的keys或者其他List中的nestedMap的keys複製,然後創建一個新的映射'HashMap >();'(與我的centralMap ),並將新創建的地圖(例如newCentralMap)中的嵌套地圖的舊鍵列表作爲鍵複製,並且作爲值,我將在newNestedMap中複製centralMap的舊鍵,並且newNestedMap的值是與舊地圖上的相同..但我不知道如何做到這一點,如果我可以在地圖中複製列表:S – ZelelB