List(mehr gleichen Einträge) in einer Map kopieren

moujtahid1977

Grünschnabel
Hallo,

Ich muss eine List, die mit mehreren gleichen Einträge in einer Map kopieren ohne die alten Einträge aus der Map zu überschreiben, meine Lösung wäre die Doppelten Einträge in einer List zu speichern und dann in der Map anlegen, aber das funktioniert bzw was ich versucht hat leider nichts gebracht! kann mir jemand bitte helfen.

Danke.
 
ich nehme nehme an Du hast nen guten Grund warum Du nicht einfach über die List iterierst, bei jedem Eintrag nachschaust ob schon in der Map vorhanden und wenn nicht ihn hinzufügst?
fragt
der Herbert
 
Mein code sieht so aus:
Code:
for (int i = 0; i < result.size(); i++) {
            if(i+1 < result.size()){
            if (m.containsKey(result.get(i).getKey())== true) {
                j = i;
                n = 0;
                //values_[0] = result.get(i).getValue();
                //m.put(result.get(i).getKey(), values_[o]);//key_ = result.get(i).getKey();
                while (m.containsKey(result.get(i).getKey())){
                    values[n] = (Object)result.get(i).getValue();
                    n++;
                    i++;
                }
                m.put(result.get(i).getKey(), values);
                i = j;
                m.put(result.get(j).getKey(), values_);
                //key_ = result.get(i).getKey();

            //}
            }} else {
                
                values_[0] = result.get(i).getValue();                m.put(result.get(i).getKey(), values_);
                
            }
             

        }

Aber in die if-Abfrage Block wird nie erreicht und bei else Teil wird mir ein Exception geworfen("Null PointerException")
 
eigentlich brauchst Du dafür nur in etwa das:
Java:
for(Value value:result){
    if(!map.contains(value.getKey()){
        map.put(value.getKey,value);
    }
}
das Value-Objekt musst Du natürlich anpassen.

benutzt Du noch eine ältere Java-Version vor 1.5, solltest Du einen Iterator verwenden und darfst das Casten nicht vergessen.
Java:
Iterator it=result.iterator()
while(it.hasNext()){
    Value value=(Value)it.next()
    if(!map.contains(value.getKey()){
        map.put(value.getKey,value);
    }
}
 
Also überschrieben wird da gar nichts, soviel ist sicher.
Aber allem Anschein nach konntest Du mir dein Problem noch nicht ganz klar machen. :)
 
Danke noch mal für die Antworten,
ich meine die alten Einträge mit dem selben Schlüssel(key) überschrieben: bsp wenn in der Map ein Enitrag mit (key1, v1), aber dann möchte ich eine zweite Eintrag mit key1, aber diesmal mit v2, dann wird der erste überschrieben.um das zu vermeiden habe das Map so definiert Map<String, Object[]> damit die Werte der selben Key in einer Feld gespeichert und das passiert der Fehler in der fogenden Anweisung:
<CODE>
for (int i = 0; i < result.size(); i++) {
if(i+1 < result.size()){
if (m.containsKey(result.get(i).getKey())== true) {
j = i;
n = 0;
//values_[0] = result.get(i).getValue();
//m.put(result.get(i).getKey(), values_[o]);//key_ = result.get(i).getKey();
while (m.containsKey(result.get(i).getKey())){
values[n] = (Object)result.get(i).getValue();
n++;
i++;
}
m.put(result.get(i).getKey(), values);
i = j;
m.put(result.get(j).getKey(), values_);
//key_ = result.get(i).getKey();

//}
}} else {

values_[0] = result.get(i).getValue();
m.put(result.get(i).getKey(), values_);

}


}
</CODE>
 
Also um ehrlich zu sein habe ich mir dein Code-Beispiel nicht so genau angesehen, denn es sieht nicht gerade schön aus. :)

der Hinweis war wichtig: Map<String, Object[]>

ich empfehle dir doch statt dem Object[] eine ArrayList zu nehmen, das macht die Sache für dich sehr viel einfacher.

Und schau dir unbedingt mal an wie man so eine List richtig Objekt für Objekt durchgeht (iterieren oder enumerieren), sonst wirst Du die Nullpointer-Exceptions nur schwer in den Griff bekommen.

so in etwa könnte das dann aussehen:
Java:
for(Value value:result){   
  if(map.contains(value.getKey()){
    map.get(value.getKey).add(value);
  }
  else {
    map.put(value.getKey,new ArrayList<Value>());
    map.get(value.getKey).add(value);
  }
}
 
Zurück