我想我明白你的問題,你從一個文件中的地圖字符串到字符串映射到地圖......等事情是這樣獲得:
Map<String, Map<String, Map<String, Map<String, String>>>> initialMap;
什麼是不是在你的問題明確如果你知道會有多少層次的地圖。如果是的話,那麼就像我剛纔那樣寫你的初始地圖(對於4級地圖)就可以得到你需要的層數。
如果您事先並不知道您有多少水平,那麼這就更難了。在那種情況下,你的算法是健全的。我只會使其更加仿製藥是這樣的:
Object q = initialMap;
for(String key : keyList)
{
Map<String, ?> x = (Map<String, ?>)q;
q = x.get(key);
}
return (String)q;
但是,這將永遠給你一個警告,那你將有增加@SuppressWarnings壓制(「未登記」)的方法。
你可以嘗試在一種方法中抽象這個。
編輯:有一種方法可以在工具類中完全抽象它。我會打電話給你想要的一種遞歸地圖。您的任何Map都是從String到String的映射,或者是映射到String到遞歸映射的映射。這可以被抽象這樣:
interface IRecursiveMap {
String get(List<String> keyList);
}
class RecursiveMap implements IRecursiveMap{
Map<String, IRecursiveMap> map;
@Override
public String get(List<String> keyList) {
String key = keyList.get(0);
return map.get(key).get(keyList.subList(1, keyList.size()));
}
}
class ValueMap implements IRecursiveMap{
Map<String, String> map;
@Override
public String get(List<String> keyList) {
String key = keyList.get(0);
return map.get(key);
}
}
所以IRecursiveMap是定義你的地圖的共同行爲的界面:從密鑰列表得到的東西的能力。 RecursiveMap是將String映射到另一個IRecursiveMap的實現,ValueMap是遞歸的最後一個映射,它實際上將String映射到String。
在執行好是:
- 該代碼使用泛型正常和數據完全打出來。這意味着你沒有更多的通用警告。
- 所有在這個地圖鏈中存儲東西的邏輯都被抽象爲幾個實用類。
另一方面,缺點是填充地圖可能有點複雜,但它也可以遞歸地完成。
使用迭代器很常見。 – 2013-03-08 18:23:05
你可以改變嵌套的地圖設計嗎?還是來自另一個圖書館? – bowmore 2013-03-08 18:23:57
是固定的,它來自另一個庫 – prashanthkvs 2013-03-08 18:24:29