Spigot/Java ein value aus einer HachMap löschen?
Hallo ich versuche mal den code zusammenzufassen:
HashMaps:
public static HashMap<UUID, Chunk> map = new HashMap();
public static HashMap<UUID, Chunk> mapCreator = new HashMap();
Spieler:
Player player = (Player) sender;
UUID playerUUID = player.getUniqueId();
Zum erstellen der Stadt:
if (args[0].equalsIgnoreCase("create")) {
if (!(Main.mapCreator.containsKey(playerBOSS)) && !(Main.map.containsKey(playerBOSS))) {
if (args.length == 1) {
Chunk town = player.getLocation().getChunk();
Main.mapCreator.put(playerBOSS, town);
Main.map.put(playerBOSS, town);
player.sendMessage("Du hast eine Stadt erstellt!");
}
dann kann man jemanden einladen und dann kann der mit /town accept annehmen
und wird mit:
Main.map.put(playerUUID, town);
hinzugefügt.
Und jetzt will ich das ich die Stadt löschen kann und nur der der auch die stadt erstellt hat, also jemand der in der map mapCreator ist und das value von dem key (seine UUID) gleich dem Chunk entspricht in dessen value der ist also sowas wie:
if (Main.map.get(playerUUID) == town) das habe ich auch so aufgeschrieben
so das er halt die town "meint" in dessen map/value der ist.
Ich bin mir nicht sicher ob das klappt aber jetzt kommt erst mein richtiges problem...
Wenn mehrere in meiner town sind gibt es ja mehrere keys zu einem value und die muss ich ja irgendwie auflisten können um sie alle auf einmal zu löschen, weil dann das value nicht mehr exestert ODER gibt es eine möglichkeit ein value aus einer hashmap zu löschen? im internett habe ich sowas wie: for (Map.Entry<UUID, Chunk> entry : Main.map.entrySet()) {
UUID k = entry.getKey();
Chunk v = entry.getValue();
System.out.println("Key: " + k + ", Value: " + v);
Main.map.remove(k);
}
Main.map.forEach((k, v) -> {
System.out.println("Key: " + k + ", Value: " + v);
Main.map.remove(k);
});
gefunden aber da kamen fehlercodes und es hat ncht wirklich funktioniert...
Kann mir jemand sagen wie ich den delete teil machen kann?
3 Antworten
Main.map.values().removeAll(Collections.singleton(town));
Das löscht alle Einträge aus der HashMap, welche town als Value haben.
Check ob der der den command ausführt auch creator ist
Dann alle Elemente der Map durchgehen und schauen ob die Town vom creator gleich dem chunk ist den Player xy aus der Map hat dann den entfernen
X.remove(Key)
Lies die Frage.
Wenn mehrere in meiner town sind gibt es ja mehrere keys zu einem value und die muss ich ja irgendwie auflisten können um sie alle auf einmal zu löschen, weil dann das value nicht mehr exestert ODER gibt es eine möglichkeit ein value aus einer hashmap zu löschen?
Aber hä. Zu einem Key gibt's immer nur einen value. Heißt ein Key hat nur einen. Value ein value kann mehrere Keys haben.
Was er meint, ist, dass er mehrere Key-Value-Paare hat, viele mit der selben Value, und nun will er alle Einträge/Paare löschen, die eine bestimmte Value haben.
Key ist die Spieler-UUID und Value ist die Stadt, in welcher der Spieler ist.
Er will nun das löschen einer Stadt ermöglichen, und damit eben auch das löschen aller Einträge, wo ein Spieler diese Stadt als Value hat.
Anders ausgedrückt: Löschen by Value.
Aaah. For Schleife. Alle values vergleichen dann diese aus der Map löschen lassen. Oder Map.values.removeAll(Town)
Vielen dank das ist einfach und genau das, wonach ich gesucht habe :D