[BEGINNER] Neue HashMap aus Alter erstellen?

gamp

Mitglied
Hey!

Zuerst der Aufbau:
Code:
HashMap<String, AllSet> allMap = new HashMap<String, AllSet>();

die Klasse "AllSet" besteht lediglich aus settern und gettern für 4 Variablen:
private String name;
private Integer age;
private Boolean reg;
private Long joined;

Nun hab ich auch noch eine 2. HashMap:
Code:
HashMap<String, UserSet> userMap = new HashMap<String, UserSet>();

die Klasse "UserSet" besteht hier auch wieder nur aus settern und gettern für die 2 Variablen:
private String name;
private Integer age;

Frage:
Wie kann ich jetzt eine neue Map "newMap" aus der HashMap "allMap" erstellen (nicht blos Referenzen, ich will quasi das "allMap" unverändert bleibt) und in der neuen Map "newMap" dann "age" und "name" mit den Values der "userMap" überschreiben, wobei die anderen Werte "reg" und "joined" unverändert bleiben?

Bisher hab ich es in etwa so:
Code:
private HashMap<String, AllSet> getNewMap(String username) {
		HashMap<String, AllSet> tmpMap = new HashMap<String, AllSet>();
		AllSet newSet = new AllSet();
		if(hasUserSpecificSet(username)) {
			UserSet specific = getUserSet(username);
			newSet.setName(specific.getName());
			newSet.setAge(specific.getAge());
		} else {
                //use default AllSet values
                }
		tmpMap.put("new", newSet);
		return tmpMap;
}
In etwa so, wobei getUserSet(String username) für den "username" eine spezifische UserSet ausgibt, falls vorhanden.
Entweder ich hab irgendwo den Wurm drin oder ich hab einen total falschen Weg eingeschlagen. Ausserdem muss das
doch auch einfacher gehen?

Regards
 
Als erstes solltest du dir angewöhnen, von generischen Klassen, z.B. deine HashMap, eigene Klassen abzuleiten; das verkürzt nicht nur Deklarationen, sondern du hast auch die Möglichkeit, bei Bedarf eine andere Collection zu verwenden, ohne überall in deinem Code entsprechende Änderungen vornehmen zu müssen. Diesen und noch ein paar andere Tipps habe ich mal im Thread Programmier- und Entwicklungsrichtlinien gepostet.
Eventuell ist für dich auch ein HashSet geeigneter.
Sobald du das getan hast, kannst du die clone()-Methode überschreiben, um eine 'deep copy' deiner Collection bereitzustellen. Diese kannst du dann aufrufen, und in der so erzeugten Kopie die Werte nach deinen Wünschen ändern.
 
Alles klar, dann werd ich wohl erstmal lesen, lesen und nochmal lesen und danach schau ich mir mal HashSet an.

Danke!
 
Zurück