Arraylisten nach Größe sortieren?
Hallo zusammen,
ich habe ein Problem.
Ich code ein Spiel in JAVA, indem man Items sammeln muss. Nun habe ich eine HashMap<Spielername (String), Zusammelndeitems (ArrayList<Items>)>. Diese Hashmap möchte ich jetzt nach der Größe der ArrayLists sortieren.
Angenommen ich habe 3 ArrayLists und möchte diese nach dessen größe Sortieren, wie mache ich das?
LG,
Hammi
1 Antwort
Die Einträge einer HashMap sind nicht geordnet.
This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/HashMap.html
Wenn du eine HashMap mit geordneten Einträgen willst solltest du eine TreeMap verwenden.
Versuch's mal mit folgender, die sollte alle Einträge automatisch anhand der Länge des Arrays sortieren:
TreeMap<String, ArrayList<Item>> treeMap = new TreeMap<>(Comparator.comparingInt(name -> treeMap.get(name).size()).reversed());
Ah ok, my bad, man kann eine TreeMap wohl nicht anhand ihrerer values sortieren, sondern nur anhand der Keys.
Wenn du das eh nur sortieren willst, um eine Liste an Keys in der richtigen Reihenfolge zu erhalten, kannst du deine HashMap hernehmen wie du es bisher hattest und darauf basierend eine Liste an Keys erstellen. So in der Art müsste es gehen:
List<String> strings = player_list.entrySet().stream()
.sorted(Comparator.comparing(entry -> entry.getValue().size()))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
Hallo, bei mir kommt jetzt immer der Fehler: Cannot invoke "java.util.ArrayList.size()" because the return value of "java.util.TreeMap.get(Object)" is null.
Das ist der Code: