ArrayList in ArrayList sortieren

Status
Nicht offen für weitere Antworten.
F

FFNShadow

Gast
Hallo,

ich habe mich den halben Vormittag durch das Forum gewühlt und einen Teil meiner Probleme gelöst bekommen.

Folgende Ausgangslage.
Ich habe eine ArrayList, welche wiederrum aus mehreren ArrayLists von Typ String besteht.

Das Ganze schaut so aus:

[Text, zahl1, zahl2, zahl3, zahl4], [Text2, zahl5, zahl6, zahl7, zahl8],...

Ich möchte nun diese einzelnen ArrayLists nach einem der Zahlenwerte ordnen lassen.
Im Forum wurde recht oft vorgeschlagen, dass man dies einfach mittels Collections.sort und einem Comparator lösen kann.

Hier mein Comparator (Code hier aus dem Forum und ein wenig angepasst):

Code:
Comparator comparator = new Comparator(){
		 public int compare(Object o1, Object o2) {
			
			List list1 = (List) o1;
			List list2 = (List) o2;

			
			final Object element1 = list1.get(4);
			final Object element2 = list2.get(4);

			
		        return compareElements(element1, element2);
		}
	};

Aber irgendwo habe ich noch ein Problem
Ich rufe die Sortierung folgendermaßen auf.
Code:
Collections.sort(a, comparator);

Tjo. und nun zu meinem Fehler in der Zeile des Aufrufes:
Code:
Erstellen eines statischen (static) Verweises für das nicht-statische Feld comparator nicht möglich

Das setzen des comperators auf static funktioniert nicht, da man bei compareElements dann Probleme bekommt.
 

Wildcard

Top Contributor
igitt, Fehlermeldungen auf deutsch :bae:
Vermutlich rufst du Collections.sort(a, comparator); in einem statischem Kontext aud während der comparator eine Instanzvariable ist.
 
F

FFNShadow

Gast
jo. Fehler gefunden und gelöst. Danke

Nur hab ich jetzt ein weiteres Problem. Sortiert wird wunderbar nach der einen Spalte mittels:

Code:
private int compareElements(Object element1, Object element2) {
			int a = element1.toString().compareTo(element2.toString());
			      return a;
			  }

Da die Elemente in der inneren Arraylist eh als String gespeichert werden, war das der erste Gedanke den ich hatte.
Funktioniert auch soweit, bis man z.B. Zahlen hat, die mehr Stellen haben. Beispiel:

[Dienst_0, 8.33, 7.88, 10.11, 6.16, 10.63, 1.59]
[Dienst_2, 5.55, 5.52, 8.36, 10.99, 2.76, 10.13]
[Dienst_4, 3.27, 3.53, 10.17, 9.85, 2.98, 2.84]
[Dienst_3, 5.72, 9.94, 2.79, 6.2, 8.72, 4.49]

Sortiert wurde nach der letzten Spalte. Wie zu erwarten arbeitet compareTo von links nach rechts. Also haut das leider nicht ganz hin und Vergleichsoperationen wie < oder > gehen ja nicht auf Strings.

Was mir jetzt einfallen würde, wäre das auffüllen mit 0-en. Aber das kann es ja nicht sein :)

Nochmal kurz die Sachlage. Bis auf das 1. Feld werden alle Felder mit double - Werten gefüllt.
Abgespeichert werden alle Felder als String.

Wäre über einen anderen Lösungsansatz dankbar.
 

Lupo4u2

Mitglied
Frage: wieso hast du Zahlenwerte als Strings gespeichert?!?

Und ja, wenn du die Sortierung (wenn es Strings bleiben sollen) vernünftig haben willst, kannst du entweder mit 0en auffüllen, oder aber du überprüfst noch die Position des Kommas. (erst alle mit einer stelle vorm komma, dann die mit 2 stellen, usw usf...)
 
G

Guest

Gast
Lupo4u2 hat gesagt.:
Frage: wieso hast du Zahlenwerte als Strings gespeichert?!?

Ich will im 1. Feld der inneren Arraylist einen Text stehen haben.
Der Rest der Werte sollen vom Typ double sein.

Ich bin immer davon ausgegangen, dass ein Array(List) immer in jedem Feld den selben Datentypen haben muss. Wenn das falsch ist, so korrigiert mich.
Am Liebsten wäre mir ja auch eine Speicherung mit Double-Werten, da man diese recht leicht vergleich kann. Nur müsste ich dann ja auch meinen Text mit Double-Werten codieren.
 

Lupo4u2

Mitglied
Hm... Wozu der Text im ersten feld?!?

Wenn es irgendwie als Identifizierung der inneren Arrays dienen soll würde ich eine eigene klasse von ArrayList ableiten und dann eine String variable darin anlegen.

Ungefähr so:

Code:
public class DoubleArray extends ArrayList<Double>

private static final long serialVersionUID = 1L;

//Hier ist dein Identifizierungsstring:
private String m_Identifier;

	public DoubleArray() {
	super();
   m_Identifier = new String();
	}

//get methode um den Wert zu lesen
public String get_Identifier(){return m_Identifier}
//set methode um den Wert zu schreiben
public void set_Identifier(String ID){m_Identifier = ID);}

}

jetzt kannst du diese Klasse normal wie eine ArrayList benutzen und hast aber auch noch einen Identifier für jeden einzelnen array... würde dir das helfen?!?

P.S. Feierabend! Wochenende! :D
 

Wildcard

Top Contributor
Du könntest auch einfach eine HashMap nehmen und den String als Key benutzen und die Arraylists als values eintragen.
 
F

FFNShadow

Gast
Ich nochmal :D

Der Vorschlag von Lupo4u2 funktioniert wunderbar. Danke nochmal.
Allerdings hab ich jetzt gleich das nächste Problem.

Ich habe eine Klasse, in der mit den Inhalten der Arraylist gearbeitet wird.
Meine Idee war, dass ich einne Teil der inneren Arrays in eine neue Arraylist schreibe und dort bearbeite. Geht auch super, nur mit dem Problem, dass wohl bei der Bearbeitung der Inhalt, der alten ArrayLists mit geändert wird.

Hier mal ein Ausschnitt aus dem Code:
Code:
public ffd(ArrayList<DoubleArray> dienste, ArrayList<DoubleArray> knoten) {

ArrayList<ArrayList<String>> verteil = new ArrayList<ArrayList<String>>();
ArrayList<DoubleArray> reserven = new ArrayList<DoubleArray>();
....

verteil.add(new ArrayList<String>());
verteil.get(j).add(knoten.get(j).get_Identifier());
reserven.add(knoten.get(j));

verteil.get(j).add(dienste.get(i).get_Identifier()); 
reserven.get(j).set(2,reserven.get(j).get(2)- dienste.get(i).get(1));
reserven.get(j).set(3,reserven.get(j).get(3)- dienste.get(i).get(2)); 
reserven.get(j).set(4,reserven.get(j).get(4)- dienste.get(i).get(3));

Jetzt zu meiner Frage:

Gibt es eine Möglichkeit, dass Ganze "statisch" zu machen?
Also ohne, dass die UrsprungsArrayList mit geändert wird.
Ich habe es bereits über einen Zwischenwvariable versucht, allerdings hilft das auch nicht. Die Daten im AusgangsArray werden wieder mit geändert.
 

Lupo4u2

Mitglied
Moin,

schön das meine Idee funktioniert ;)

Zu deinem neuen Problem:
Hier ist der bzw. ein Fehler:
Code:
reserven.add(knoten.get(j));
Du erstellst in deinem reserven Array keine neue Kopie von knoten.get(j), sondern es wird nur eine Referenz (=Verweis) auf knoten.get(j) erstellt.
Das kannst du lösen in dem du
Code:
reserven.add(new DoubleArray (knoten.get(j)));
schreibst.
Durch das
Code:
new DoubleArray (...)
wird eine wirkliche kopie erstellt und die Werte in deinem anderen Array ändern sich nicht mehr mit. :)

Gruß
 
F

FFNShadow

Gast
Oki. Hab das jetzt mittels

Code:
reserven.add(new ArrayList<Double>(knoten.get(j)));

gelöst.

Nochmals Danke für die schnelle Hilfe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
E ArrayList sortieren Java Basics - Anfänger-Themen 16
T ArrayList (Zahlen) aufsteigend sortieren mit Duplikaten Java Basics - Anfänger-Themen 8
N ArrayList sortieren Java Basics - Anfänger-Themen 6
D Best Practice ArrayList sortieren Java Basics - Anfänger-Themen 10
S ArrayList<ArrayList<Integer>> sortieren Java Basics - Anfänger-Themen 3
K Sring ArrayList Manuel sortieren Java Basics - Anfänger-Themen 15
A ArrayList sortieren... Java Basics - Anfänger-Themen 5
M ArrayList<String> alphabetisch sortieren Java Basics - Anfänger-Themen 5
W ArrayList nach Wunsch sortieren Java Basics - Anfänger-Themen 4
G ArrayList sortieren Java Basics - Anfänger-Themen 4
N Arraylist Auto sortieren Java Basics - Anfänger-Themen 7
L ArrayList mit Objekten sortieren Java Basics - Anfänger-Themen 3
L verschachteltes ArrayList nach Geburtsdatum sortieren Java Basics - Anfänger-Themen 4
O ArrayList sortieren Java Basics - Anfänger-Themen 3
V ArrayList Sortieren nach Double funktioniert nicht Java Basics - Anfänger-Themen 3
R ArrayList nach Strings sortieren Java Basics - Anfänger-Themen 6
N ArrayList<ArrayList> sortieren - hilfe bei Comperator Java Basics - Anfänger-Themen 6
M ArrayList sortieren Java Basics - Anfänger-Themen 8
G ArrayList mit Objeken nach Wert sortieren Java Basics - Anfänger-Themen 7
J ArrayList sortieren Java Basics - Anfänger-Themen 4
G Die Objekte eine ArrayList sortieren Java Basics - Anfänger-Themen 50
A Objekte in ArrayList anhand Variable sortieren Java Basics - Anfänger-Themen 10
K ArrayList sortieren mit Quicksort Java Basics - Anfänger-Themen 3
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
A ArrayList sortieren Java Basics - Anfänger-Themen 7
M ArrayList sortieren? Java Basics - Anfänger-Themen 8
G ArrayList sortieren (K-nearest neighbor/Clusterin) Java Basics - Anfänger-Themen 3
G Eine ArrayList effizient sortieren Java Basics - Anfänger-Themen 5
G ArrayList<Map.Entry.> nach den Values sortieren? Java Basics - Anfänger-Themen 8
G ArrayList sortieren - mal wieder. Java Basics - Anfänger-Themen 6
M ArrayList sortieren Java Basics - Anfänger-Themen 7
C ArrayListen in einer ArrayList der Grösse nach sortieren Java Basics - Anfänger-Themen 5
G TreeMap sortieren über ArrayList als Value Java Basics - Anfänger-Themen 9
M ArrayList in Array, dann sortieren Java Basics - Anfänger-Themen 15
L ArrayList mit int-Werten sortieren Java Basics - Anfänger-Themen 14
krgewb ArrayList allgemein halten Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
W ArrayList und toString Java Basics - Anfänger-Themen 17
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
M 2d ArrayList durchgehen Java Basics - Anfänger-Themen 2
Blkckroll45 Arraylist Java Basics - Anfänger-Themen 6
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
F Methode ArrayList mit Eingabewert Java Basics - Anfänger-Themen 2
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
thobren jtable arraylist Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
Zeppi OOP ArrayList Java Basics - Anfänger-Themen 2
P ArrayList Java Basics - Anfänger-Themen 4
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
M For Schleife/ArrayList Java Basics - Anfänger-Themen 12
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
L Methoden ArrayList Werte hinzufügen und löschen Java Basics - Anfänger-Themen 32
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
J Nur bestimmter Typ aus der ArrayList ausgeben. Java Basics - Anfänger-Themen 9
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
krgewb ArrayList von ArrayList Java Basics - Anfänger-Themen 2
R ArrayList Problem Java Basics - Anfänger-Themen 6
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben