# Objekte in ArrayList anhand Variable sortieren



## auxilium (3. Mrz 2008)

Hi,

ich habe eine ArrayList namens kaufprodukte<Produkte>


die Produkte- Klasse sieht so aus:


```
public class Produkte {
	String name;
	int preis;
	Datum herausgabe;

	public Produkte (String name, int preis, Datum herausgabe){
		this.name = name;
		this.preis = preis;
		this.herausgabe = herausgabe;
		
	}
}
```

kann ich nun die ArrayListe kaufprodukte nach preis sortieren?
wie funktioniert das genau

Collections.sort haut bei mir nicht wirklich hin.


----------



## SlaterB (3. Mrz 2008)

warum auch, wenn es doch nur mit Comparable-Objekten geht,
oder alternativ einem Comparator,

bitte das Collections-Kapitel in einem Lehrbuch lesen,
mit etwas Verständnis gehts vielleicht mit Forum-/ google-Suche nach Comparable/ Comparator etwas schneller


----------



## auxilium (3. Mrz 2008)

thx hab mir das angeguckt,

ist es eigentlich auch möglich zu wählen, nach was ich auswählen kann, oder kann ich prinzipiell nur eine compareTo - Methode verwenden?


----------



## Beni (3. Mrz 2008)

Wenn du mehr als einen Comparator benutzt, kannst du auch nach verschiedenen Kriterien sortieren.


----------



## auxilium (3. Mrz 2008)

ganz dumme frage: wie mache ich das ?

ich meine , ich sortiere doch anhand meiner compareTo-Methode,

diese gibt es doch nur einmal.


----------



## tfa (3. Mrz 2008)

Du machst dir für jedes Kriterium eine eigene Comparator-Klasse. Jede davon hat eine eigene compareTo-Methode.


----------



## Marco13 (3. Mrz 2008)

Dazu gibt's auch einen recht ausführlichen FAQ-Eintrag ... http://www.java-forum.org/de/viewtopic.php?p=251024 ... schon gesehen?


----------



## JavaFred (4. Mrz 2008)

Wenn Du nur nach Preis sortieren willst, implementier Comparable:


```
public class Produkt implements Comparable<Produkt>
{
	String name;
	int preis;
	Datum herausgabe;

	public Produkt(String name, int preis, Datum herausgabe)
	{
		this.name = name;
		this.preis = preis;
		this.herausgabe = herausgabe;
	}

	@Override
	public int compareTo(Produkt o)
	{
		return o.preis - this.preis;
	}
}
```


----------



## auxilium (4. Mrz 2008)

also der faq beitrag ist echt gut, 
den hab ich schon gelesen,


allerdings bin ich immer noch überfragt, wie ich beispielsweise nach einem 2. Wert sortiere.

ich meine ich implementiere meiner zu sortierenden Klasse ( in dem Fall Produkte) die Comparable und muss dann eine CompareTo-Methode einbauen.

Diese Compare to Methode ist doch speziell und sortiert nach einem Kriterium, dem preis.

Wie kann ich nun nach einem weiterem Kriterium , wie z.b. dem Gewicht sortieren.


ISt es eigentlich generell auch möglich alphabetisch zu sortieren?


----------



## SlaterB (4. Mrz 2008)

> ISt es eigentlich generell auch möglich alphabetisch zu sortieren?

ja, Strings implementieren Comparable

> wie ich beispielsweise nach einem 2. Wert sortiere. 

willst du alternativ das Hauptsortierkriterum wechseln?
-> zweiter Comparator oder in der compareTo-Operation die Einstellung irgendwo abfragen und anhand dessen die richtigen Attribute vergleichen

oder willst du erst nach Attribut a sortieren und bei Gleichheit nach b?
dann 

int compare = o.preis - this.preis; 
if (compare != 0) {
return compare;
}
compare = zweiter Vergleich;
return compare;


----------



## auxilium (4. Mrz 2008)

ah danke jetzt hab ichs verstanden


----------

