2016-05-11 6 views
2

Ich versuche, Einträge aus einer Hashmap zu entfernen, wenn ich sie bereits verwendet habe. Leider kenne ich Java-8-Lambda-Ausdrücke nicht, daher bin ich mir nicht sicher, wie ich die Einträge korrekt entfernen kann. Könnte mir jemand helfen oder erklären, was ich zu tun habe? HierVerwendung removeif auf einer Hashmap

ist die Art und Weise habe ich versucht, es zu tun:

ArrayList<Integer> range10 = new ArrayList<Integer>(); 
    ArrayList<Integer> range15 = new ArrayList<Integer>(); 
    ArrayList<Integer> rangeMax = new ArrayList<Integer>(); 

for (int age = 16; age <= 100; age++){ 
     for (Entry<Integer, Partner> entry : dbMap.entrySet()){ 
      int key = entry.getKey(); 
      Partner person = entry.getValue(); 
      if (person.getAge() == alter && person.getAgeRange() == 10){ 
       range10.add(key); 
       entry.setValue(null); 
      } 
      else if (person.getAge() == alter && person.getAgeRange() == 15){ 
       range15.add(key); 
       entry.setValue(null); 
       } 
      else if (person.getAge() == age){ 
       rangeMax.add(key); 
       entry.setValue(null); 
       } 
      dbMap.entrySet().removeIf(entries->entries.getValue().equals(null)); 

     } 

Und ich bekomme eine java.lang.NullPointerException dafür. Ich glaube nicht, dass dies ein Duplikat ist, um zu fragen, was eine NullPointerexception ist, da ich hauptsächlich frage, wie man die removef-Funktion benutzt.

Antwort

5

Sie bekommen das, weil Sie .equals() auf getValue() -Objekt aufrufen, das ist null, so wird es nicht funktionieren. Das passiert hier:

dbMap.entrySet().removeIf(entries->entries.getValue().equals(null)); 

Was Sie tun müssen, ist dies:

dbMap.entrySet().removeIf(entries->entries.getValue() == null); 
+0

Vielen Dank für Sie antworten, Das ist mein Problem behoben, obwohl ich habe jetzt ein neues. Ich habe jetzt eine 'ConcurrentModificationException'. Ich dachte "removeif" könnte verwendet werden, so dass diese Ausnahme nicht geworfen würde. Zumindest lese ich diesen Thread so: [link] (stackoverflow.com/a/29187813/2077574). Benutze ich das falsch? – UsefulUserName

+0

@UsefulUserName Wenn Sie eine neue Frage haben, fragen Sie sie in einem neuen Thread (auf diese Weise sehen mehr Leute es und Sie erhalten bessere Chancen, eine Antwort zu erhalten). Kommentare sind nicht als Folgefragen gedacht. – Pshemo

+0

@ Pshemo Okay, werde ich tun. Danke für diese Information. – UsefulUserName