2013-04-30 123 views
1

的名單我使用一個HashMap用於處理使用HashMap來遍歷包含HashMap

for (String aclLine : refinedFileContents){ 
if(Some condition) 
{ 
    staticVariablesMap.put("lineNumber", **lineNumber**); 
    staticVariablesMap.put("**srcHostName**", batchBean.getSourceIpAddress()); 
    staticVariablesMap.put("batchBean", batchBean); 
} 
} 

後來我想遍歷這些包含HashMap的每一行,並執行一些操作具體到每個aclLine添加類似的值一個給定的鍵,值對(例如,得到該lineNumbersrcHostName),並用它來處理下一步。我如何迭代這些收集的hashmaps爲散列表中的每個srcHostName條目?我應該使用ArrayList/List來存儲hashmap的每個實例嗎?這是可行的嗎?

+2

散列圖不保留廣告訂單。我建議並行陣列/列表,如果這是你正在尋找。 – 2013-04-30 17:23:49

+0

感謝您的快速回復,我正在使用添加到地圖中的順序排序,因此應該照顧我認爲。請您告訴如何遍歷每個hashmap條目的列表,或者我可以在哪裏讀取相同的。謝謝 – palley 2013-04-30 17:26:13

+0

事實上,你甚至將HashMap中的條目稱爲「行」,這告訴我你很可能沒有按照預期的方式使用它。如果你更好地指出這是什麼目的,我毫不懷疑,有人會有更好的方式爲你做到這一點。 – Thor84no 2013-04-30 17:29:36

回答

2

對我來說聽起來像你應該把你的hashmaps中的屬性合併到一個對象中。然後你可以使用一個哈希映射。

public class AclLine { 
    private long lineNumber; 
    private String srcHostName; 
    private Object batchBean; 
} 

Map<AclLine> lines = new HashMap<AclLine>(); 
// Or maybe a List? 
List<AclLine> lines = new ArrayList<AclLine>(); 

或者是有一個原因,你需要這些「水貨」映射條目?

+0

如果只有一個值,爲什麼要使用散列表? – Jimmt 2013-04-30 17:28:14

+0

@Jimmt我不能說這個例子只是一個值,但如果是這樣,那麼是的,也許一切都在一個數據結構中。但是,如果您需要逐步構建最終結果,則可能對「中間」數據結構有用。 – NilsH 2013-04-30 17:29:07

+0

是@Nilsh,當迭代For循環時,我必須跟蹤srcHostName和其他相關細節,然後再使用srcHostName獲取它們的Ipaddress並使用Ipaddress執行其他操作。 – palley 2013-04-30 17:31:11

0

我沒有完全得到你的問題,就像你只將值放在一個散列圖&你想迭代hashmaps 你可以像這樣迭代散列圖。

Iterator<Entry<String, Object>> it = hashMap.entrySet().iterator(); 
while (it.hasNext()) 
{ 
    Map.Entry<String, Object> entry = (Map.Entry<String, Object>)it.next(); 
}