TreeMap sortieren über ArrayList als Value

Status
Nicht offen für weitere Antworten.
G

gondor

Bekanntes Mitglied
Hallo!

Ich habe eine TreeMap. Diese beinhaltet unterschiedliche ID's als Key.

Jeder ID ist als Value eine ArrayList zugeordnet. In der ArrayList sind verschiedene Eigenschaften zu
finden, die die ID besser beschreiben. Name, Wert, Delimter, ... usw. Nun möchte ich jedoch, dass mir
die TreeMap nach den Namen aus der ArrayList sortiert ausgegeben wird.

Wie kann ich das machen?

Vielen Dank,

gondor(..)
 
S

SlaterB

Gast
möchtest du die IDs dazu noch mitausgeben oder nur die Listen?

map.entrySet() oder map.values() liefert die ein Set von Map.Entrys oder ArrayListen,
diese kannst du in eine Liste tun und dann sortieren und dann ausgeben,

zum Sortieren brauchst du einen Comparator der die Reihenfolge von zwei Objeken angibt
 
G

gondor

Bekanntes Mitglied
@SlaterB

die IDs brauch ich schon noch, da ich zu jeder ID die Eigenschaften mit ausgeben muss.

Allerdings halt sortiert nach dem Namen...

gibt es etwas worauf man bei dem Comparator achten muss?

gondor(..)
 
S

SlaterB

Gast
dann also entrySet()

das in eine Liste,
Comparator programmieren (siehe Tutorials/ Lehrbücher zu diesem Stichwort) der zwei Map.Entry-Objekte vergleicht,

dazu holt er sich die ArrayListen aus den Map.Entrys, dann die Namen aus den ArrayListen und dann die Namen vergleichen,
nicht allzu kompliziert,
einfach mal schlaumachen (Beispiele anschauen) und dann versuchen
 
G

Guest

Gast
hm, jetzt habe ich das mal so gemacht (vereinfacht):

Code:
public class Test implements Comparator {
	
	TreeMap basket = null;

	public static void main(String[] args) {
		Test test = new Test();
		test.los();
	}

	public void los() {

		try {
			
			ArrayList al_1 = new ArrayList();
			al_1.add(0, "5112");
			al_1.add(1, "Schrauben");
			
			ArrayList al_2 = new ArrayList();
			al_2.add(0, "5114");
			al_2.add(1, "Computer");
			
			ArrayList al_3 = new ArrayList();
			al_3.add(0, "5111");
			al_3.add(1, "Bild");
			
			ArrayList al_4 = new ArrayList();
			al_4.add(0, "5119");
			al_4.add(1, "Natter");
			
			ArrayList al_5 = new ArrayList();
			al_5.add(0, "5100");
			al_5.add(1, "Kleid");
			
			basket = new TreeMap(this);
			basket.put("5114", al_1);
			basket.put("5111", al_2);
			basket.put("5119", al_3);
			basket.put("5100", al_4);
			basket.put("5112", al_5);
			
		} catch (Exception i) {
			System.out.println(i.getMessage());
		}
	}

	public int compare(Object o1, Object o2) {
		ArrayList al1 = (ArrayList)(basket.get(o1));
		ArrayList al2 = (ArrayList)(basket.get(o2));
		return ((String)al1.get(1).toString()).compareTo( (String)al2.get(1).toString() );
	}

}

leider gibt es eine exception beim compare:

Code:
at java.util.TreeMap.getEntry(Unknown Source)
at java.util.TreeMap.get(Unknown Source)
at Test.compare(Test.java:92)

wo liegt hier der fehler?

gondor(..)
 
S

SlaterB

Gast
das Posten eines Testprogrammes finde ich sehr löblich, danke,

---------
soso, du möchtest anscheinend dass die gesamte TreeMap nach dem Namen sortiert wird?

das ist eigentlich nicht vorgesehen, sortiert werden sollte doch wohl nach der Id,
nicht die Id nehmen und dann die ArrayList dazu herausnehmen und danach sortieren ;)

warum nimmst du dann nicht den Namen als Key?,
alternativ ein neues Objekt (z.B. eine ArrayList bestehend aus Id + Name) als Key, dann könnte der Comparator was damit anfangen,

hier gehts schief weil die Compare-Operation nicht nur zum Sortieren sondern auch bei anderen Operationen
wie bereits dem Einfügen oder dem Auslesen der ArrayList benötigt wird (um einen neuen Key einzufügen/ einen Suchkey in der Map zu finden muss ja verglichen werden),
somit entsteht eine Rekursion, um Compare ausführen wird wieder Compare aufgerufen, darin wieder usw.,

es funktioniert in diesem Fall nur wenn du die ArrayList aus einer zweiten Datenstruktur liest, z. B. einer zweiten Map

Code:
import java.util.*;

public class Test implements Comparator {

	TreeMap basket1 = null;
	TreeMap basket2 = null;
	
	public void los() {


		ArrayList al_1 = new ArrayList();
		al_1.add(0, "5112");
		al_1.add(1, "Schrauben");

		ArrayList al_2 = new ArrayList();
		al_2.add(0, "5114");
		al_2.add(1, "Computer");

		ArrayList al_3 = new ArrayList();
		al_3.add(0, "5111");
		al_3.add(1, "Bild");

		ArrayList al_4 = new ArrayList();
		al_4.add(0, "5119");
		al_4.add(1, "Natter");

		ArrayList al_5 = new ArrayList();
		al_5.add(0, "5100");
		al_5.add(1, "Kleid");

		basket1 = new TreeMap(this);
		basket2 = new TreeMap();


		put("5114", al_1);
		put("5111", al_2);
		put("5119", al_3);
		put("5100", al_4);
		put("5112", al_5);

		System.out.println(basket1); // nach Name sortiert
		System.out.println(basket2); // nach Id sortiert
	}
	public void put(String key, ArrayList value) {
		// wichtig: erst in Map2, dann in Map1 einfügen..
		basket2.put(key, value);
		basket1.put(key, value);
	}

	public int compare(Object o1, Object o2) {
		ArrayList al1 = (ArrayList) (basket2.get(o1));
		ArrayList al2 = (ArrayList) (basket2.get(o2));
		
		return al1.get(1).toString().compareTo(al2.get(1).toString());

	}

	public static void main(String[] args) {
		Test test = new Test();
		test.los();
	}

}
ich könnte mir aber gut vorstellen dass es allgemein sehr bösartiger Stil ist,
dass ein Comparator zum Vergleich zweier Objekte in irgendwelchen Listen nachschaut,
ausgerechnet noch in einer direkt relevanten Datenstruktur,

man sollte doch eher direkt aus o1 und o2 die Schlüsse ziehen,
wie das aussehen könnte zeigt sich in einem Beispiel zu dem was ich die ganze Zeit vorgeschlagen hatte:

Code:
import java.util.*;

public class Test {

	TreeMap basket = null;

	public void los() {

		ArrayList al_1 = new ArrayList();
		al_1.add(0, "5112");
		al_1.add(1, "Schrauben");

		ArrayList al_2 = new ArrayList();
		al_2.add(0, "5114");
		al_2.add(1, "Computer");

		ArrayList al_3 = new ArrayList();
		al_3.add(0, "5111");
		al_3.add(1, "Bild");

		ArrayList al_4 = new ArrayList();
		al_4.add(0, "5119");
		al_4.add(1, "Natter");

		ArrayList al_5 = new ArrayList();
		al_5.add(0, "5100");
		al_5.add(1, "Kleid");

		basket = new TreeMap();

		basket.put("5114", al_1);
		basket.put("5111", al_2);
		basket.put("5119", al_3);
		basket.put("5100", al_4);
		basket.put("5112", al_5);

		System.out.println(basket); // nach Id sortiert

		Set entries = basket.entrySet();
		List list = new ArrayList(entries);
		Collections.sort(list, new Comparator() {
			public int compare(Object o1, Object o2) {

				ArrayList al1 = (ArrayList) ((Map.Entry) o1).getValue();
				ArrayList al2 = (ArrayList) ((Map.Entry) o2).getValue();

				return al1.get(1).toString().compareTo(al2.get(1).toString());
			}

		});

		System.out.println(list); // nach Name sortiert

	}

	public static void main(String[] args) {
		Test test = new Test();
		test.los();
	}

}
 
B

bygones

Gast
mhm warum nicht ein eigenes Objekt erstellen (das dann Name und das andere z.b. speichert). Diese Klasse implementiert Comparable, in der du dann definierst wie sortiert werden soll.

Dann einfach in eine TreeMap stecken....
 
G

gondor

Bekanntes Mitglied
@deathbyaclown

wie meinst du das? mir ist das 'konzept' noch nicht wirklich klar...

@SlaterB

danke für deine mühe.

gondor(..)
 
B

bygones

Gast
so mein ich das
Code:
public class Artikel implements Comparable<Artikel> {
  private int nummer;
  private String name;
 

  public Artikel(int nr, String na) {
     nummer = nr;
     name = na;
  }

  // getter Methoden und was man sonst noch braucht

  public int compareTo(Artikel a) {
     return a.nummer - nummer; // sortieren nach der nummer
     // oder
    return a.name.compareTo(name); // sortieren nach name
  }
}
dann im Programm
Code:
Map<Integer, Artikel> tm = new TreeMap<Integer, Artikel>();
tm.add(new Artikel("5112", "Schrauben"));

alternativ könnte man auch die nummer nicht in Artikel speichern, da du dies ja über das mapping der TreeMap bekommst[/code]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N TreeMap alphabetisch sortieren? Java Basics - Anfänger-Themen 3
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
T TreeMap lässt sich nicht sortieren Java Basics - Anfänger-Themen 8
G Map (TreeMap in TreeMap) Java Basics - Anfänger-Themen 1
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
C TreeMap Abfragen Problem Java Basics - Anfänger-Themen 7
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
I TreeMap Java Basics - Anfänger-Themen 4
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
M TreeMap Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
W Treemap remove Java Basics - Anfänger-Themen 5
N Frage zu TreeMap Java Basics - Anfänger-Themen 3
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
H Datentypen TreeMap<Double, Object> - negative Werte? Java Basics - Anfänger-Themen 4
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
H TreeMap Rückgabe - Compiler-Warnings Java Basics - Anfänger-Themen 9
S Studentenverwaltung mit TreeMap Java Basics - Anfänger-Themen 8
F Treemap und Sortierung? Java Basics - Anfänger-Themen 2
G TreeMap Java Basics - Anfänger-Themen 6
P wie clont sich eine TreeMap? Java Basics - Anfänger-Themen 8
G TreeMap Probleme. Java Basics - Anfänger-Themen 10
G TreeMap vom 1. bis letzte eintrag durchgehen Java Basics - Anfänger-Themen 17
F TreeMap speichern und lesen Java Basics - Anfänger-Themen 3
Q TreeMap immer sortiert halten Java Basics - Anfänger-Themen 9
H Treemap mit zusammengesetzten Key erstellen Java Basics - Anfänger-Themen 13
O TreeMap nach Object[] casten? Java Basics - Anfänger-Themen 3
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
L Array sortieren Java Basics - Anfänger-Themen 4
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
T Java: Array monat absteigend sortieren? Java Basics - Anfänger-Themen 1
B Liste sortieren? Java Basics - Anfänger-Themen 4
P Array Sortieren mit boolean? Java Basics - Anfänger-Themen 33
scratchy1 Array sortieren und dann String-Repräsentation ausgeben Java Basics - Anfänger-Themen 2
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
B Suchen und sortieren Java Basics - Anfänger-Themen 10
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
O Zweidimensional Array sortieren Java Basics - Anfänger-Themen 14
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
UnknownInnocent Variablen Teile eines Arrays zufällig sortieren Java Basics - Anfänger-Themen 7
K Methoden Array[][] sortieren Java Basics - Anfänger-Themen 30
UnknownInnocent Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
E ArrayList sortieren Java Basics - Anfänger-Themen 16
L Methode zum sortieren Java Basics - Anfänger-Themen 1
L Methode zum sortieren Java Basics - Anfänger-Themen 1
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
A Sortieren ausgerechneter Werte aus einer TXT Datei Java Basics - Anfänger-Themen 8
E LMC (Assembler) Sortieren von 3 Zahlen Java Basics - Anfänger-Themen 4
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
A Array sortieren Java Basics - Anfänger-Themen 1
N StringArray alphabetisch sortieren Java Basics - Anfänger-Themen 4
Tommy135 Erste Schritte JavaDoc Sortieren Java Basics - Anfänger-Themen 5
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
informatikschüler21 String im Array sortieren Java Basics - Anfänger-Themen 4
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
M Arrays sortieren und kleinster Abstand Java Basics - Anfänger-Themen 3
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
I <List> sortieren Java Basics - Anfänger-Themen 2
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
R Objekte Vergleichen und Sortieren Java Basics - Anfänger-Themen 3
I Sortieren nach Priorität Java Basics - Anfänger-Themen 3
S List<T<X,Y> sortieren Java Basics - Anfänger-Themen 5
W Array sortieren Java Basics - Anfänger-Themen 3
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
Alex/89 Werte einer .txt Datei sortieren Java Basics - Anfänger-Themen 8
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
S array sortieren Java Basics - Anfänger-Themen 7
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
D Methoden int-Array absteigend sortieren Java Basics - Anfänger-Themen 8
C Chars in einem String alphabetisch sortieren Java Basics - Anfänger-Themen 1
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 5
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
J Sortieren Java Basics - Anfänger-Themen 21
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
J Ungewolltes Sortieren eines Arrays Java Basics - Anfänger-Themen 4
T Collections Sortieren von Automodellen (v.a. BMW und Mercedes) Java Basics - Anfänger-Themen 3
P Liste sortieren verschiedener generischer Typen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben