使用索引迭代Java Map

时间:2014-12-04 18:07:47

标签: java collections map io writer

如何迭代Map以将内容从特定索引写入另一个索引。

Map<String, Integer> map = new LinkedHashMap<>();
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));

            for (String string : map.keySet()) {

                    bufferedWriter.write(string + " " + map.get(string));
                    bufferedWriter.newLine();

            }
            bufferedWriter.close();

我有两个int值,from和to,我现在怎么写10到100?有没有可能用索引迭代地图?

4 个答案:

答案 0 :(得分:9)

LinkedHashMap保留插入条目的顺序。因此,您可以尝试使用索引创建键列表并循环:

List<String> keyList = new ArrayList<String>(map.keySet());
for(int i = fromIndex; i < toIndex; i++) {
    String key = keyList.get(i);
    String value = map.get(key);
    ...
}

另一种不创建列表的方法:

int index = 0;
for (String key : map.keySet()) {
    if (index++ < fromIndex || index++ > toIndex) {
        continue;
    }
    ...
}

答案 1 :(得分:1)

您可以使用该循环增加int变量:

int i = - 1;
for (String string : map.keySet()) {
    i++;
    if (i < 10) {
        // do something
    } else {
        // do something else
    }
    bufferedWriter.write(string + " " + map.get(string)); // otherwise...
    bufferedWriter.newLine();
}

答案 2 :(得分:0)

这有点老了,但是对于那些想使用Map.forEach的人来说可以达到以下效果:

AtomicInteger i = new AtomicInteger(0);
map.forEach((k, v) -> {
   int index = i.getAndIncrement();
});

答案 3 :(得分:0)

还有一个简单的解决方案:

{{1}}

你有键、值、索引和大小。