Objekte Sortieren

Status
Nicht offen für weitere Antworten.

Hi Fish

Mitglied
Hi,
ich will Objekte die in einer Arrayliste stehen anhand ihrer Eigenschaften sortieren mittels comparator.
Meine Frage ist nun, da ich ja nicht für jede Objekteigenschaft eine eigene compare Klasse schreiben will wollte ich es mittels eines Selectors machen, aber das geht ja nicht da compare nur obj1 /obj2 animmt.
Geht das irgendwie und wenn ja wie?
Gruß HiFish




So hatte ich mir das gedacht:
Code:
class cmp_usr implements Comparator<user>
{	
	public int compare(user usr1,user usr2,int sel)
	{
		switch(sel)
		{
			case 1: return usr1.getName().compareTo(usr2.getName());//Name
				break;
			case 2://ctime
				break;
			case 3://wtime
				break;
			case 4://cw
				break;
			case 5:	if(usr1.getJobs()-usr2.getJobs()<0)//Job Anzahl
					{
						return -1;
					}else if(usr1.getJobs()-usr2.getJobs()>0)
					{
						return 1;
					}
					return 0;
				break;
			default: break;
		}
		return 0;
	}
}
 
S

SlaterB

Gast
> nicht für jede Objekteigenschaft eine eigene compare Klasse
was sind die Objekteigenschaften? wenn das verschiedene Klassen A, B, C sind dann muss jede Klasse Comparable implementieren,

wenn es alle nur Strings oder ähnlich bekanntes ist,
was meinst du dann mit 'eigene compare Klasse'?

> public int compare(user usr1,user usr2,int sel)
geht natürlich nicht, compare ist fest vorgegeben,

Collections.sort oder andere vorgegebene Klassen würden ja auch keinen dritten Parameter übergeben,
wie sollten diese über das Sortierkriterium entscheiden?

überlege dir erstmal, bzw. schreib mal hier hin, WER da sortieren soll und nach welchen Kriterien
(wer entscheidet darüber, wann ist es wo bekannt, wo findet der Sortieraufruf statt)

wenn du einfach nur Collections.sort aufrufst hast du es schwer,
normalerweise übergibt man dann dem Sort einen speziellen Comparator, der das Kriterium kennt
 

Hi Fish

Mitglied
Hab ich mich wohl nicht ganz klar ausgedrückt,
also ich hab mehrere Objekte z.B. user,group etc. Von jedem gibt es zig Instanzen die ich in jeweils einer Arrylist speichern will (Also eine für Liste für User eine für Gruppen usw.).
Nun will ich die Listen sortieren können anhand der Objekteigenschaften wie bei user z.B. ctime/wtime/name/anzjobs

Genau um den von dir angesprochenen "speziellen Comparator" geht es (der steht übrigens auch im Quellcode von meinem ersten Post). Das es so nicht geht ist mir auch klar, deshalb frage ich ja wie ich das geschickt lösen kann ohne für jede Eigenschaft (ctime/wtime usw) eine eigene "spezielle Comparator" Klasse zu schreiben.

Ich hoffe das Problem ist klarer :)
Gruß HiFish




Klasse user:
Code:
public class user {
	private time ctime;
	private time wtime;
	private String name;
	private int anzJobs;
	private String group;
	
	public user(String name,int anzJobs,time ctime,time wtime,String group)
	{
		this.ctime=ctime;
		this.wtime=wtime;
		this.name=name;
		this.anzJobs=anzJobs;
		this.group=group;
	}
	public user(){}
        ....
        //Hier kommen jetzt noch die ganzen set und get Methoden
}
 
S

SlaterB

Gast
du vermischst mir zu sehr 'verschiedene Klassen' + 'verschiedene Eigenschaften in den Klassen'

wenn sich die Eigenschaften in verschiedenen Klassen wiederholen:

die Klassen, die gemeinsame Eigeschaften haben, müssen ein gemeinsames Interface implementieren,

der Comparator sortiert dann nur die Interface-Operation getWTime()
und arbeitet mit jeder Liste, die Elemente des Interface enthält

dann können auch Elemente verschiedener Klassen in einer Liste sortiert werden

----------

wenn du einfach nur viele Klassen und viele Eigenschaften hast,
die alle nix miteinander zu tun haben,
dann brachst du für n Klassen zu je m Eigenschaften n*m Comparatoren,
inwiefern sollte sich da was vereinfachen lassen?

natürlich könntest du allgemein die Eigenschaften dynamischer aufbauen,
in einem Array/ Liste von Comparables

dann geht pro Klasse ein Comparator
Code:
class Compi implements Comparator<User> 
{    
  int category = 4;
  // können auch nachrangig mehrere Kategorien sein
   public int compare(User usr1,User usr2,) 
   { 
      return usr1.getObject(category).compareTo(usr2.getObject(category));
     // category 1 = Name, 2= ..
   } 
}

mit primitiven Datentypen wirds schwer, gesondert behandeln oder in Integer kapseln,

dieser dynamische Comparator ließe sich dann natürlich auch einfach in einen allgemeinen für alle diese Klassen ändern,
wiederum auf ein Interface statt Klasse User
 

Marco13

Top Contributor
Spontan würde ich dir empfehlen, eigene Comparatoren dafür zu bauen

UserByNameComparator implements Comparator {...}
UserByJobsComparator implements Comparator {...}

Evtl. könnte man es auch flexibler machen, aber ich kann mir kaum vorstellen, dass das nötig ist. (Allerdings solltest du dir überlegen, ob da irgendwas dagegen spricht :wink: )
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
O Erste Schritte Objekte als Datenelemente Allgemeine Java-Themen 14
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
N Dynamische Objekte / DB Allgemeine Java-Themen 5
J Objekte binär speichern Allgemeine Java-Themen 10
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
V Objekte in Kategorien einteilen. Allgemeine Java-Themen 6
M 3D Objekte mit einer Linie Verbinden Allgemeine Java-Themen 3
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
A Dummy-Objekte für Webgui erzeugen Allgemeine Java-Themen 12
W Objekte speichern mit JFileChooser Allgemeine Java-Themen 8
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
L Objekte in Liste packen Allgemeine Java-Themen 2
S XML in Objekte wandeln. Euer Rat? Allgemeine Java-Themen 12
G Objekte serialisieren Allgemeine Java-Themen 2
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
D Objekte nur unter bestimmten Voraussetzungen erzeugen Allgemeine Java-Themen 4
S Objekte mit Arrays Allgemeine Java-Themen 9
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S erzeugte objekte zählen Allgemeine Java-Themen 3
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
Landei Objekte ohne Konstruktoraufruf erzeugen Allgemeine Java-Themen 7
E tiefe Kopie nicht serialisierbarer Objekte Allgemeine Java-Themen 3
J Speicherbedarf und persistente Objekte Allgemeine Java-Themen 4
J ArrayList Objekte anhand Propertywerte filtern Allgemeine Java-Themen 3
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben