Sortieren nach Objekten

sirair

Aktives Mitglied
Hallo,

ich möchte wissen wie ich eine Liste erstmal nach Objekten und anschließend dem Namen sortieren kann. Diese werden dann später in einem Table als Spaltennamen dargestellt.

Beispiel:
Liste mit folgenden Elementen Sport, Elegance, Avantgade, Tief, Hoch, ...

Ich möchte dass die Liste wie folgt sortiert wird.
Elegance, Tief, Avantgarde, Hoch

Die ersten beiden Elemente in der Liste (Elegance, Tief) sind besondere Elemente, erhalte die Elemente auch aus einer Funktion. Diese sollen im Table als die ersten Spalten erscheinen, aber sortiert.
Wie muss die Compare Funktion aussehen?
 

André Uhres

Top Contributor
Das hört sich mehr nach einer Ordnung als nach einer Sortierung an

Hallo Tuttle64,

ich glaube nicht, dass Du recht hast, bin mir allerdings nicht ganz sicher.
Hier ist ein Beispiel, um Verzeichnisse vor Dateien zu sortieren, dann in alphabetischer Reihenfolge (was ungefähr dem Fall von Sirair entsprechen könnte):
Java:
    public int compare(File filea, File fileb) {
        if (filea.isDirectory() && !fileb.isDirectory()) {
            //Objekt A ist 'kleiner' als Objekt B
            return -1;
        } else if (!filea.isDirectory() && fileb.isDirectory()) {
            //Objekt A ist 'größer' als Objekt B
            return 1;
        } else {
            //Objekt A ist 'gleich' Objekt B,
            //wir sortieren dann in alphabetischer Reihenfolge:
            return filea.getName().compareToIgnoreCase(fileb.getName());
        }
    }
Gruß,
André
 

tuttle64

Bekanntes Mitglied
Hallo André Uhres,
wie man mit Java sortiert ist mir bekannt. Nur sehe ich in folgender Anforderung

Ich möchte dass die Liste wie folgt sortiert wird.
Elegance, Tief, Avantgarde, Hoch

keine Sortierung, sondern wie ich bereits sagte, eine Reihenfolge.
 

sirair

Aktives Mitglied
danke für dein Beispiel.
Aber bei mir sollten in dem Fall, Verzeichnisse zwar vor den Dateien erscheinen, aber sortiert! Also sowohl Verzeichnise und Dateien sollten sortiert nach dem Namen bspw. sortiert werden.
 

bERt0r

Top Contributor
Vielleicht suchst du sowas in der Art:
Java:
enum Typ {Sport(4), Elegance(0), Avantgade(2), Tief(1), Hoch(3);
private final int id;
Typ(int i)
{
	id=i;
}
public int getId()
{
	return id;
}
}

public class Element implements Comparable<Element>
{
	Typ typ;
	String name;
	
	public Element(Typ t,String n)
	{
		typ=t;
		name=n;
	}

	@Override
	public int compareTo(Element o) {
		Element e=(Element)o;
		if(typ.equals(e.typ))
		{
			return name.compareTo(e.name);
		}
		else
		{
			if(typ.getId()>e.typ.getId())
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
	}
	
	public String toString()
	{
		return name +" "+typ;
	}
}
 

sirair

Aktives Mitglied
nicht ganz :)

Java:
if(this.name.equals("Elegance") || this.name.equals("Tief") || o.getName().equals("Elegance") || o.getName().equals("Tief")){
			return this.name.compareTo(o.getName());
		}
else{

...
}

die Elemente elegance und tief sollten.. als erstes erscheinen aber sortiert... deshalb die Unterscheidung nach diesen Elementen. Im else Zweig sollden die anderen Elemente sortiert werden. Ich weiß nicht wie ich das machen soll.
Aber die LIste in folgender reihenfoge sein: Elegance, Tief, Acantgare, Hoch, Sport
 

bERt0r

Top Contributor
Genau das macht es ja... hier meine Testklasse damit dus siehst -.-
Java:
public class SortTest extends JFrame {

	private JPanel contentPane;
	private JTable table;
	private JScrollPane scrollPane;
	private JScrollPane scrollPane_1;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					SortTest frame = new SortTest();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public SortTest() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		Vector<Element> elements=createElements();
		Collections.sort(elements);
		
		Vector<Vector<Object>>data=new Vector<Vector<Object>>();
		for(Element e:elements)
		{
			Vector<Object> v=new Vector<Object>();
			v.add(e);
			data.add(v);
		}
		
		Vector<String>colnames=new Vector<String>();
		colnames.add("Element");
		
		
		table = new JTable(data,colnames);
		
		contentPane.setLayout(new GridLayout(0, 1, 0, 0));
		
		scrollPane = new JScrollPane();
		contentPane.add(scrollPane);
		JList list = new JList(elements);
		scrollPane.setViewportView(list);
		
		scrollPane_1 = new JScrollPane();
		contentPane.add(scrollPane_1);
		scrollPane_1.setViewportView(table);
	}
	
	Vector<Element> createElements()
	{
		Vector<Element> v=new Vector<Element>();
		v.add(new Element(Typ.Avantgade,"Josef"));
		v.add(new Element(Typ.Avantgade,"Karl"));
		v.add(new Element(Typ.Elegance,"Fritz"));
		v.add(new Element(Typ.Elegance,"Hermann"));
		v.add(new Element(Typ.Hoch,"Herbert"));
		v.add(new Element(Typ.Hoch,"Hermine"));
		v.add(new Element(Typ.Tief,"Leopold"));
		v.add(new Element(Typ.Tief,"Johann"));
		v.add(new Element(Typ.Sport,"Frieda"));
		v.add(new Element(Typ.Sport,"Elisabeth"));
		return v;
	}
}
 

sirair

Aktives Mitglied
du hast in deinem enum mit den Indizes die Reihenfolge bestimmt.
Wie kann ich ohne Angabe der Indizes so eine Sortierung vorhehmen, bei mir wird die Liste dynamisch erstellt und darunter gibt es einige Spalten die an erster Postion auftauchen sollen.

das Beispiel unten zeigt, wie es funktioniert. Gibt es eine bessere Lösung?
Java:
if(this.name.equals("Elegance") || this.name.equals("Tief") || o.getName().equals("Elegance") || o.getName().equals("Tief")){
            return Integer.parseInt("----") + this.name.compareTo(o.getName());
        }
else{
 this.name.compareTo(o.getName());
...
}
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Dein code kann gar nicht funktionieren, alleine Integer.parseint("----") muss dir eine Exception rauswerfen und deine If abfrage ist komplett für die Katz. Ausserdem sortierst du nur nach namen.
Es haben dir schon einige leute gesagt, dass du keine Sortierung sondern eine Reihenfolge haben willst. Du musst dem Computer doch sagen welches Element vor einem anderen kommt, riechen kann er nicht dass Tief vor Avantgarde kommt. Der Computer kann dir deine Elemente alphabetisch nach deinem Elementtyp-String sortieren: Avantgarde, Elegance, Hoch, Sport, Tief ansonsten musst du ihm eine Reihenfolge angeben. Das geht am bequemsten durch einen Rang in Zahlenformat.
Wenn du mir nicht glaubst kann ich dir auch nicht helfen...
 
N

nillehammer

Gast
Nachdem die Elemente Elegance und Tief als gegeben vorausgesetzt sind, würde ich diese garnicht in die Liste mit aufnehmen, sondern in eigenen Variablen speichern. Den Rest (der offensichtlich dynamisch ist) in eine Liste und dann ganz normal sortieren.

Wenn Du das nicht willst, sondern unbedingt alles in der Liste haben willst, implementiere einen Comparator<Element> der Deine gewünschte Sortierreihenfolge abbildet. Ungefähr so:
Java:
public final class ElementComparator implements Comparator<Element> {
  @Override
  public final int compare(final Element e1, final Element e2) {

    if (e1== null || e2 == null) [
      throw new NullpointerException("Keines der zu vergleichenden Elemente darf null sein");
    }

    if(e1== e2) {
     return 0;
    }

    // Elegance ist immer "kleiner" als alle anderen.
    if(e.getName().equals("Elegance") {
      return -1;
    }

    // Alle anderen sind immer "größer" als Elegance.
    if(e2.getName().equals("Elegance")) {
      return 1;
    }

   // Hier selber weitermachen...
  }
}

Du siehst, dass der Code in der CompareTo-Methode etwas merkwürdig wirkt. Deswegen finde ich meinen ersten Vorschlag sauberer.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Sortieren Von Objekten Nach Attribut Allgemeine Java-Themen 6
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
K Sortieren nach Vorgabe Allgemeine Java-Themen 6
G Map nach key sortieren Allgemeine Java-Themen 14
B JTable nach Icon sortieren Allgemeine Java-Themen 6
J Map nach value sortieren Allgemeine Java-Themen 14
S String-Array nach Datum sortieren Allgemeine Java-Themen 10
Developer_X Ein Array nach einem bestimmten Attribut sortieren Allgemeine Java-Themen 3
D JTabel sortieren nach mehreren kriterien Allgemeine Java-Themen 3
G Verschachtelte Treemaps, nach Value sortieren Allgemeine Java-Themen 11
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
C ArrayList nach Datum sortieren Allgemeine Java-Themen 7
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
S ArrayList nach mehreren Spalten sortieren? Allgemeine Java-Themen 13
L Nach Häufigkeit sortieren Allgemeine Java-Themen 6
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
J HashMap nach values sortieren Allgemeine Java-Themen 2
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
Willi.We Array sortieren Allgemeine Java-Themen 5
L ArrayList sortieren Allgemeine Java-Themen 2
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
P Wertepaare sortieren Allgemeine Java-Themen 3
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P Listen sortieren Allgemeine Java-Themen 1
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
B Algortihmus zum linearen Sortieren Allgemeine Java-Themen 1
K ArrayList sortieren Allgemeine Java-Themen 16
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
Bluedaishi String Array mit Datum und Uhrzeit String sortieren Allgemeine Java-Themen 6
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Sortieren und Leerzeichen Allgemeine Java-Themen 11
W Array Indizes sortieren Allgemeine Java-Themen 16
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
E Array alphabetisch sortieren Allgemeine Java-Themen 1
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
S Int Values sortieren Allgemeine Java-Themen 7
A 2D-array problem (sortieren) Allgemeine Java-Themen 6
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D priority queue sortieren Allgemeine Java-Themen 10
G List<Person> sortieren Allgemeine Java-Themen 6
K Hashmap sortieren Allgemeine Java-Themen 6
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
M ArrayList<String>, String häufigkeit sortieren Allgemeine Java-Themen 4
J Wie sortieren? Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
V ArrayList sortieren Allgemeine Java-Themen 7
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
O Sortieren von Telefonnummern Allgemeine Java-Themen 8
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
S Koordinatentupel-Map sortieren?? Allgemeine Java-Themen 16
C ArrayList sortieren (mehrere Kriterien) Allgemeine Java-Themen 6
G ArrayList mit quicksort sortieren Allgemeine Java-Themen 9
G sortieren von generics Allgemeine Java-Themen 10
Z Als Final deklarierte Klasse im Array sortieren Allgemeine Java-Themen 2
O ArrayList sortieren Allgemeine Java-Themen 8
G ArrayList mit Indices parallel sortieren Allgemeine Java-Themen 8
D HashMap sortieren Allgemeine Java-Themen 2
C Sortieren File[] Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
O Vektoren in Vektor sortieren aber mit Java 1.4 (!) Allgemeine Java-Themen 4
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
A Sortieren mit Java Allgemeine Java-Themen 3
J Properties sortieren Allgemeine Java-Themen 6
E Bitte um Rat: Sortieren mit ArrayList Allgemeine Java-Themen 2
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
F Doppelt verkettete Liste sortieren? Allgemeine Java-Themen 8
G Set absteigend Sortieren Allgemeine Java-Themen 6
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
D Sortieren? Allgemeine Java-Themen 13
N ArrayList sortieren Allgemeine Java-Themen 10
S Dten im Excel sortieren Allgemeine Java-Themen 5
H Objekte Sortieren Allgemeine Java-Themen 4
F Kann man String[] sortieren? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben