【问题标题】:Iterating Keys, Values of HashMap 4 at a time一次迭代 4 个 HashMap 的键、值
【发布时间】:2017-07-27 14:27:08
【问题描述】:

我有一个哈希图。

public HashMap<String, Integer> lines = new HashMap<String, Integer>();

我想返回前 4 个键,然后是前 4 个值,然后重复直到没有任何剩余。

如何最好地做到这一点?

我整个上午都在努力:)

【问题讨论】:

  • 您能发布您尝试过的内容以及您想要实现的目标吗?
  • 我不是 Java 专家,所以让我尽力而为吧!我在哈希图中存储图像的文件路径和整数并将它们写入PDF。但是由于 PDF 的格式,我需要先写四个图像,然后是 4 个整数(所以它们在图像下 PDF 的下一行)。
  • 前 4 个键和前 4 个值是什么意思!你想回到哪里?

标签: java hashmap iterator


【解决方案1】:

如果您可以设法将所有键作为一个列表获取,那么您可以一次迭代 4 个,因为这样您就可以通过索引位置获取它们,就像这样

//get all keys as list
List<String> list = new ArrayList<String>(lines.keySet());

//one iteration of this loop deals with 4 keys and 4 values.
for(i=0; i<n; i=i+4) {
    k1 = list.get(i);
    v1 = lines.get(k1);

    k2 = list.get(i+1);
    v2 = lines.get(k2);

    k3 = list.get(i+2);
    v3 = lines.get(k3);

    k4 = list.get(i+3);
    v4 = lines.get(k4);
}

编辑

如果元素的数量不是 4 的倍数,那么你可以这样做:

//get all keys as list
List<String> list = new ArrayList<String>(lines.keySet());

//one iteration of this loop deals with 4 keys and 4 values.
int mod = n%4;
for(i=0; i<n-mod; i=i+4) {
    k1 = list.get(i);
    v1 = lines.get(k1);

    k2 = list.get(i+1);
    v2 = lines.get(k2);

    k3 = list.get(i+2);
    v3 = lines.get(k3);

    k4 = list.get(i+3);
    v4 = lines.get(k4);
}

//deal with last 1, 2 or 3 elements separately.
if(mod>=1) {
    k1 = list.get(i);
    v1 = lines.get(k1);

    if(mod>=2) {
        k2 = list.get(i+1);
        v2 = lines.get(k2);

        if(mod>=3) {
            k3 = list.get(i+2);
            v3 = lines.get(k3);
        }
    }
}

【讨论】:

  • 这太棒了(并且有效)!但是,如果我不知道列表的大小(可能是 1-43 之间的任何值),有没有办法考虑到这一点?
  • @J.Walsh 您可以先迭代到 4 的最大倍数,然后分别处理最后几个元素。请参阅编辑后的答案。
  • 非常感谢!这是完美的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2010-12-02
  • 2012-11-23
  • 2012-09-30
  • 2013-05-25
  • 2015-04-22
  • 1970-01-01
相关资源
最近更新 更多