keySet-Feld in HashMap null ist

Ich versuche eine Schleife über eine HashMap mit der keySet() Methode wie folgt:

for (String key : bundle.keySet()) {
    String value = bundle.get(key);
    ...
}

Ich benutze eine Menge for-each-Schleifen auf HashMaps in andere Teile von meinem code, aber so ein komisches Verhalten: seine Größe ist 7 (was ist normal) aber keySet, entrySet und values sind null (entsprechend den Eclipse-debugger)!

Den "bundle" - variable instanziiert wird und wie folgt gefüllt (nichts original...):

Map <String, String> privVar;
Constructor(){
    privVar = new HashMap<String, String>();
}
public void add(String key, String value) {
    this.privVar.put(key, value);
}
  • Wenn Sie tun eine Menge der for-each-Schleifen auf HashMaps ich denke, möchten Sie vielleicht ändern Sie Ihre Struktur.
  • Ich Stimme mit @Macarse. Auch: wenn Sie wollen, um eine Schleife über einen Map und müssen beide, der Schlüssel und Werte, es ist in der Regel viel besser, um eine Schleife über die entrySet() zur Vermeidung unnötiger Suchvorgänge für jede Taste.
  • Vielen Dank für Ihren Vorschlag Joachim, werde ich das tun. @Macarse: ich habe die Werte in "meine Karten" Schlüssel-Wert-Paare extrahiert aus den Dateien (Excel-Tabelle) verwenden, um eine Reihe von syntaktischen Regeln (regExp überprüft) vor dem erstellen einer neuen Kalkulationstabelle. Denken Sie Karten sind nicht ein gutes Objekt zu speichern ?
  • Also du machst eine Map<String, String> wo ist der Schlüssel eine Zeile und den Wert der regex?
  • Nein, Nein. Der Schlüssel ist ein Schlüssel, und der Wert ist eine übersetzung. Es ist durchaus ein äquivalent zu einem "ResourceBundle " Eigenschaften" - Datei. Und so die map ist ein äquivalent für das ResourceBundle. Das ist, was inspiriert mich eigentlich 🙂
  • und warum sind Sie es Durchlaufen?
  • Ich bin der Iteration über Einträge anwenden .matches(regexp), und ändern Sie die übersetzung, wenn es fehlschlägt, nach definierten catcher/Ersatz von regulären Ausdrücken.
  • SOrry, ich verstehe immer noch nicht, wenn Sie wollen, erstellen Sie bitte eine weitere Frage, die erklären, was Sie tun.

InformationsquelleAutor Mathieu L | 2010-02-16
Schreibe einen Kommentar