2016-12-14 4 views
0

Ich habe eine Datenstruktur in einer Karte mit einer Multimap als Werte gespeichert, die ich nach mehreren Attributen sortieren möchte.Java drei Attribute, beste Möglichkeit zum Speichern + Sortieren

Hintergrund: Ich habe ein JavaFX GridPane, in dem ich einige Dinge in einer geordneten Form anzeigen möchte. Also habe ich für jeden Punkt innerhalb des GridPanes einige Elemente mit einem + String verbunden. Ich möchte die Elemente basierend auf der alphabetischen Reihenfolge der Strings anzeigen.

Ich habe nach dem jetzt:

Map<Coordinate, Multimap<Element, String>> myMap = new HashMap<Coordinate, Multimap<Element, String>>(); 

Aber für mich ist es nicht klar ist, wie die Sortierung zu tun. Wie Sie bei der Verwendung von Multimap sehen, kann ein Element mehrere Strings haben. Am Ende möchte ich nach Koordinaten (x und y) und nach dem String-Attribut für jede Koordinate sortieren. Wie geht das? Oder hat jemand eine bessere Idee, wie man diese Attribute speichert?

Edit: Sortierung Koordinaten ist einfach und nicht das Problem:

List<Coordinate> keys = new ArrayList<Coordinate>(myMap.keySet()); 
Comparator<Coordinate> comparator = Comparator.comparing(Coordinate::getX).thenComparing(Coordinate::getY); 
Collections.sort(keys, comparator); 

Ich habe es gerade erklärt mein Problem deutlich zu machen. Das Hauptproblem ist: Wie sortiere ich die Strings mit verwandten Elementen für jede Koordinate? Oder eine "bessere" Struktur zum Speichern der Attribute.

Danke!

+1

Mögliches Duplikat von [Verwendung von Komparator zur benutzerdefinierten Sortierung] (http://stackoverflow.com/questions/5245093/using-comparator-to-make-custom-sort) – Idos

+1

gut sortieren der Koordinaten sollte nicht sehr schwer sein . (Vergleichbare Schnittstelle). Die zweite ist ein bisschen schwieriger, weil Sie nach Wert sortieren müssen und Sie müssen entscheiden, welchen String-Wert der Multimap, den Sie zum Vergleich verwenden – ParkerHalo

Antwort

1

Oh verdammt. Kann diese Frage selbst beantworten. Ich mache nur den String den Schlüssel und den Element Wert. Dann mit

ListMultimap<String, Element> lmm = Multimaps.newListMultimap(
new TreeMap<>(), ArrayList::new); 

als here vorgeschlagen. Et voilà ... Für jede Koordinate wird die innere Karte nach dem String-Attribut sortiert.

Verwandte Themen