2016-08-18 1 views
5

Ich muss durch eine hashmap mit 5000 Elementen durchlaufen, aber nach der Iteration auf 500. Element muss ich einen Schlaf tun und dann die nächsten 500 Elemente fortsetzen. Hier ist das Beispiel gestohlen von here. Jede Hilfe würde geschätzt.iterate durch eine Hashmaps 'in chunks'

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()); 
    } 
} 
+0

Diese Frage ist viel sauberer als zuvor. +1 – byxor

+0

@BrandonIbbotson danke Ich wollte das alte entfernen, aber als jemand eine Antwort schickte, konnte ich es nicht mehr löschen. – PHA

+0

@PHA können Sie den Beantworter immer dazu ermutigen, seine Antwort hier erneut zu posten, damit Sie diese Frage löschen können. –

Antwort

12

haben einfach eine Zählvariable Überblick über die Anzahl der Iterationen zu halten, so weit:

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. 
    } 
} 

Beachten Sie, dass, wenn Sie beide Schlüssel und Wert in einer Schleife wollen, ist es besser, iterieren die Karte des entrySet():

for(Map.Entry<String, Integer> entry: vehicles.entrySet()) { 
    String key = entry.getKey(); 
    Integer value = entry.getValue(); 
    // ... 
} 

auch: verwenden Sie keine rohen Typen:

Map<String, Integer> vehicles = new HashMap<>();