[英]iterate through a hashmap 'in chunks'
I need to iterate through a hashmap with 5000 items but after iterating on 500th item I need to do a sleep and then continue the next 500 items. 我需要遍历一个包含5000个项目的hashmap,但是在迭代了第500个项目之后我需要进行一次睡眠然后继续下一个500项目。 Here is the example stolen from here .
这是从这里偷来的例子。 Any help would appreciated.
任何帮助将不胜感激。
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map vehicles = new HashMap();
// Add some vehicles.
vehicles.put("BMW", 5);
vehicles.put("Mercedes", 3);
vehicles.put("Audi", 4);
vehicles.put("Ford", 10);
// add total of 5000 vehicles
System.out.println("Total vehicles: " + vehicles.size());
// Iterate over all vehicles, using the keySet method.
// here are would like to do a sleep iterating through 500 keys
for(String key: vehicles.keySet())
System.out.println(key + " - " + vehicles.get(key));
System.out.println();
String searchKey = "Audi";
if(vehicles.containsKey(searchKey))
System.out.println("Found total " + vehicles.get(searchKey) + " "
+ searchKey + " cars!\n");
// Clear all values.
vehicles.clear();
// Equals to zero.
System.out.println("After clear operation, size: " + vehicles.size());
}
}
Just have a counter variable to keep track of the number of iterations so far: 只需要一个计数器变量来跟踪到目前为止的迭代次数:
int cnt = 0;
for(String key: vehicles.keySet()) {
System.out.println(key + " - " + vehicles.get(key));
if (++cnt % 500 == 0) {
Thread.sleep(sleepTime); // throws InterruptedException; needs to be handled.
}
}
Note that if you want both key and value in a loop, it is better to iterate the map's entrySet()
: 请注意,如果您想在循环中同时使用键和值,则最好迭代映射的
entrySet()
:
for(Map.Entry<String, Integer> entry: vehicles.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
// ...
}
Also: don't use raw types: 另外:不要使用原始类型:
Map<String, Integer> vehicles = new HashMap<>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.