2013-04-30 75 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(); 
}