【问题标题】:Iterate Java Map with index使用索引迭代 Java Map
【发布时间】:2014-12-04 18:07:47
【问题描述】:
如何迭代 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?有没有可能用索引迭代地图?
【问题讨论】:
标签:
java
collections
map
io
writer
【解决方案1】:
这有点老了,但是对于那些想要使用Map.forEach 的人来说可以达到这样的结果:
AtomicInteger i = new AtomicInteger(0);
map.forEach((k, v) -> {
int index = i.getAndIncrement();
});
【解决方案2】:
您可以在该循环中增加一个 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();
}
【解决方案3】:
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;
}
...
}
【解决方案4】:
还有一个简单的解决方案:
int i = 0;
int mapSize = map.size();
for (Map.Entry<String, Integer> element : map.entrySet()) {
String key = element.getKey();
int value = element.getValue();
...
i++;
}
您有键、值、索引和大小。