【问题标题】:Using a hashmap to iterate over a list of hashmaps使用 hashmap 遍历 hashmap 列表
【发布时间】:2013-04-30 17:21:43
【问题描述】:

我正在使用哈希图为每个已处理的aclLine 添加相似的值

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

稍后我想为每一行迭代这些哈希图,并执行一些特定于给定键、值对的操作(例如,为该 lineNumber 获取 srcHostName)并使用它来处理后续步骤。如何为哈希图中的每个 srcHostName 条目迭代这些收集的哈希图?我应该使用 ArrayList/List 来存储哈希图的每个实例吗?这可行吗?

【问题讨论】:

  • 哈希图不保留插入顺序。如果您正在搜索,我建议使用并行数组/列表。
  • 感谢您的快速回复,我正在使用添加到地图中的排序序列,因此我认为应该注意这一点。请您告诉如何为每个哈希图条目迭代该列表,或者我在哪里可以阅读相同的内容。谢谢
  • 您甚至将 HashMap 中的条目称为“行”这一事实告诉我,您很有可能没有按照预期的方式使用它。如果你能更好地说明这样做的目的是什么,我毫不怀疑有人会有更好的方式为你一起完成这一切。
  • @Thor84no:我指的是“aclLine”,作为线,我的坏小姐使用它!我的意图是迭代每个aclLine,然后满足某些条件(可能会从这里走错路,请更正..),我想为现有 Forloop 中的其他一些条目添加键/值对,因此我使用了 hashmap,以便稍后我可以检索键的值。由于 aclLines 的数量很多,所以会有不止一个 hashmap。

标签: java hashmap iteration


【解决方案1】:

在我看来,您应该将哈希图中的属性组合成一个对象。然后你可以只使用一个哈希映射。

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>();

或者您是否有需要这些“平行”映射条目的原因?

【讨论】:

  • 如果只有一个值,为什么要使用 hashmap?
  • @Jimmt 我无法判断它是否只是示例中的一个值,但如果是,那么是的,也许一切都在一个数据结构中。但如果您需要逐步构建最终结果,它可能对“中间”数据结构有用。
  • 是的@Nilsh,我必须在迭代 For 循环时跟踪 srcHostName 和其他相关细节,然后使用 srcHostName 获取他们的 Ipaddress 并使用 Ipaddress 执行其他操作。
  • 我的解决方案是:遍历 List> list = new ArrayList>();我现在如何为每个地图迭代这个列表..并获取键/值
【解决方案2】:

我没有完全得到你的问题,就像你只将值放在一个哈希图中并且你想迭代哈希图 你可以像这样迭代哈希图。

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

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 2015-02-13
    • 2010-11-07
    • 1970-01-01
    • 2018-04-08
    • 2014-05-18
    • 2022-01-16
    • 2015-10-26
    相关资源
    最近更新 更多