2011-11-17 61 views
0

我有一個地圖,在這種情況下,對象可能是數字,字符串,列表,數組或日期之一。 我需要複製這個Map,但在結果中,如果對象是Date類型(轉換細節不重要),我需要做一些轉換。遞歸生成其他地圖的地圖有一些轉換

我想我需要通過地圖0​​地圖讀取遞歸ti,但不能爲我的生活弄清楚如何做到這一點。誰能幫忙?

我可以弄清楚如何通讀完整的地圖,但不知道如何把它放。

下面是我想要做的一個大綱(非工作) - 它不創建輸出映射。

private void convertResult(Object o) { 
    Map<String, Object> returnMap = new HashMap<String, Object>(); 

    if (o instanceof Map) { 
     for (Map.Entry<Object, Object> entry: ((Map<Object, Object>)o).entrySet()) { 
      convertResult(entry.getValue());  
     } 
     return; 
    } else if (o instanceof List) { 
     for (Object li: (List) o) { 
      convertResult(li); 
     } 
     return;  
    } else if (o instanceof Number) { 
     return; 
    } else if (o instanceof Boolean) { 
     return; 
    } else if (o instanceof String) { 
     return; 
    } else if (o instanceof Date) { 
     // convert the date here 
     return; 
    } else if (o.getClass().isArray()) { 
     JsonArray array = new JsonArray(); 
     for (Object li: (Object[])o) { 
      convertResult(li); 
     } 
     return; 
    } else { 
     throw new IllegalArgumentException("Unsupported object " + o.getClass()); 
    } 

} 
+4

那麼,你有一個地圖充滿整數,字符串,日期,列表,數組和更多的地圖?誰喝醉了編程? –

+0

a)returnMap從不使用。新的JsonArray相同b)你聲明'在這種情況下對象可能是Number,String,List,Array或Date之一,但你也檢查Map。 c)如果(o instanceof Number)等可以按'if(o instanceof x)||分組(o instanceof ...'d)既然你不返回任何東西,你必須修改數據。由於唯一修改後的數據是'date'類型,你可能會返回一個新的日期,這會被忽略? e)你想輸出地圖,還是返回它 - 返回一個修改後的地圖,包含相同的列表和數組或它們的副本?不清楚! –

+1

非常有趣。 Map被定義爲'Map ',這種情況下的對象可能是我提到的類型之一。不喝醉 - 這是一個很好的理由。 – user1051058

回答

0

對於列表和地圖,您應該將給定的結果作爲條目添加到地圖中。

Object result = convertResult(entry.getValue()); 
returnMap.put(entry.getKey(),result); 

不知道是否獲取密鑰的函數的名稱是entry.getKey(),但我認爲你明白了我的觀點。 convertResult()返回entry.getValue()的轉換,所以你應該把它添加到地圖。當它發現一個Integer,Date或者其他什麼的時候recurssion正在完成。在這種情況下,您應該返回轉換後的值(即使您未觸摸它),因爲這是您將放置在地圖中的值。