我得到這樣的名單,每行一個對象持普通字符串:轉化名單多重嵌套地圖
Vehicle, Name, Property, Value
------------------------------
Car, VW, Tires, 4
Car, VW, Doors, 4
Car, Porsche, Tires, 4
Car, Porsche, Doors, 2
Car, Porsche, Color, Red
Plane, A340, Tires, 12
Plane, A340, Color, White
Plane, A750, Doors, 6
Forklift, ABC345, Color, Orange
... and so on
我想回到作爲JSON的形式:
{
"Car" : {
"VW":{ "Tires" : "4", "Doors": "4"},
"Porsche":{ "Tires" : "4", "Doors": "2" }
},
"Plane":{
"A340":{ "Tires" : "12", "Color" : "White" },
"A750":{ "Doors" : "6" }
},
"Forklift" : {
"ABC345": { "Color" : "Orange" }
}
}
我嘗試使用一個奇怪的
HashMap<String, HashMap<String, HashMap<String, String>>>
但說實話,我不知道如何正確設置它。當我遍歷列表,並寫入到HashMap中,屬性和值會被覆蓋,所以我的結果是這樣的:
{
"Car" : {
"Porsche":{ "Tires" : "4" }
},
"Plane":{
"A750":{ "Doors" : "6" }
},
"Forklift" : {
"ABC345": { "Color" : "Orange" }
}
}
我是相當新的Java和不知道這是怎麼樣的手柄嵌套地圖。
我的意思是,要求被寵愛是有點尷尬,但也許有人可以告訴我如何以正確的方式做到這一點。
編輯:在這裏,我如何添加值,我沒有粘貼這部分代碼,因爲我不知道如何檢查和決定怎麼做。
HashMap<String, HashMap<String, HashMap<String, String>>> vehiclesData = new HashMap<String, HashMap<String, HashMap<String, String>>>();
for(VehicleReportRow vehicleReportRow : unpreparedRows){
String vehicle = vehicleReportRow.getVehicle();
String name = vehicleReportRow.getName();
String property = vehicleReportRow.getProperty();
String value = vehicleReportRow.getValue();
//the most inner dataset
HashMap<String,String> propAndVal = new HashMap<String, String>();
propAndVal.put(property, value);
//the middle dataset
HashMap<String, HashMap<String,String>> nameToProps = new HashMap<String, HashMap<String,String>>();
nameToProps.put(name, propAndVal);
//and finally the outer dataset
vehiclesData.put(vehicle, nameToProps);
}
如何擁有一個'List'其中'Vehicle'包含'List '而'Model'具有屬性的'Map '。 –
此外,您應該使用您用來填充地圖的代碼更新此問題,以便人們可以提出問題的出現位置。儘管如此,很可能您需要添加檢查項以確定鍵是否已經存在,以便您添加到現有地圖而不是爲結構的前兩層創建新地圖。 – mikej
@Tichodroma爲了公平地回答他提出的其他問題(只有四個問題),不要給出非常詳細的答案。 – NominSim