2015-01-08 32 views
-1

我在試圖解決的Java中遇到問題,直到現在我無法得到它。在下面的代碼中,我有一個來自控制檯中XML解析器的響應;這一切都在這樣一行:解析成Java ArrayList對

[359710042040320, Suzuki SX4 "BB71521", 359710042067463, Chevrolet Tahoe Noir "Demonstration", 359710042091273, Isuzu D'Max AA-08612, 359710042110768, Toyota 4 Runner]

但我的目標是獲得像對一個ArrayList,其中每一個設備ID和每一個描述在一起,用逗號分隔的響應。

(DeviceID)   (Descripcion) 
359710042040320, Suzuki 
359710042067463, Chevrolet 
+0

HashMap 更合適。 –

+0

我盡了最大的努力來解決這個問題,但在我看來如此困難,如果有人能幫助我,我將非常感激。我怎麼可以嘗試使用HashMap ? –

+1

我希望其中的一個回答你的問題。如果是這樣,我們會很高興接受它!謝謝。 – mwarren

回答

1

而不是使用使用HashMap<String, String>一個List<String>嘗試。要定義它,你會怎麼做:

HashMap<String, String> result = new HashMap<String,String>(); 

那麼你的內循環替換result.add(value)有:

result.get(name);//Note Name is a string that holds you key value 

result.put(name,value); 

現在你可以從你的地圖通過名稱(鍵)來訪問你的價值觀

如果您需要查看更多文檔:HashMap Documentation

1

As Dott Bo ttstein說一個HashMap可能是你正在尋找的。我將使用LinkedHashMap,因爲LinkedHashMaps保持原始順序,而HashMaps根本不保證順序。

這裏是你可以做什麼:

Map<String, String> resultMap = new LinkedHashMap<String, String>(); 
for (int i = 0; i < nodeList.getLength(); i++) { 
    String deviceID = nodeList.item(i).getFirstChild().getNodeValue(); 
    String descripcion = nodeList.item(i).getAttributes().getNamedItem("name").toString(); 
    resultMap.put(deviceID, descripcion); 
} 

//ok, lets print out what's in the Map 
Iterator<String> iterator = resultMap.keySet().iterator(); 
while(iterator.hasNext()){ 
    String deviceID = iterator.next(); 
    String descripcion = resultMap.get(key); 
    System.out.println(deviceID + ", " + descripcion); 
} 

Maps have the big advantage that afterwards you can look up a descripcion very quickly if you have the deviceID. 

如果你真的想要一個ArrayList你能做到這一點有兩種方式:

1)的String []與陣列的一個ArrayList的2

static int DEVICE_ID = 0; 
static int DESCRIPCION = 1; 

List<String[]> result = new ArrayList<String[]>(); 
for (int i = 0; i < nodeList.getLength(); i++) { 
    String[] vehicleArray = new String[2]; 
    vehicleArray[DEVICE_ID] = nodeList.item(i).getFirstChild().getNodeValue(); 
    vehicleArray[DESCRIPCION] = nodeList.item(i).getAttributes().getNamedItem("name").toString(); 

    result.add(vehicleArray); 
} 

長度或2),你可以創建一個類來保持車輛的數據:

class Vehicle{ 

    String deviceID; 
    String descripcion; 

    public Vehicle(String deviceID, String descripcion){ 
     this.deviceID = deviceID; 
     this.descripcion = descripcion; 
    } 

} 

然後創建車輛實例的列表:

List<Vehicle> result = new ArrayList<Vehicle>(); 
for (int i = 0; i < nodeList.getLength(); i++) { 

    String deviceID = nodeList.item(i).getFirstChild().getNodeValue(); 
    String descripcion = nodeList.item(i).getAttributes().getNamedItem("name").toString(); 

    result.add(new Vehicle(deviceID, descripcion)); 
} 

最後你可能真的想保持的ID爲長數字而不是字符串。這對HashMapList<Vehicle>的想法不是問題,但它不適用於List<String[]>想法。 HashMaps可以很好地處理Long的關鍵。關鍵必須是一個長對象,但Java會自動將長對象轉換爲長對象,因此您甚至不必考慮它,只需將一個長基元設置爲關鍵字並且它將起作用。