ArrayList absteigend sortieren

LeeroyJenkins

Grünschnabel
Hallo!
Ich suche hier nach einer geeigneten Lösung, um eine ArrayList die das Objekt <Brawler> enthält, absteigend nach der Geschwindigkeit zu ordnen ( Brawler.getSpeed())
Habe schon mehrere Foren durchsucht, aber leider keine passende Lösung gefunden.
Vielen Dank im voraus,
LeeroyJenkins
 
Hallo,

schau dir mal das Interface Comparable an. Das musst du bei deiner Klasse implementieren.
Dann schau die mal die Klasse Collections an. Dort gibt es sort-Methoden.

Gruß

Sascha
 
Das müsste dann ja etwa so aussehen.

Code:
public class Brawler implements Comparable{...}

Mein Problem ist jetzt, dass ich nicht wirklich verstehe wie ich den comparator für Collections.sort erstellen muss.
 
Ich hab es falsch beschrieben. ;-)
Du implementierst es nicht in dieser Klasse sondern du erstellst eine neue Klasse die das Interface implementiert.
Dann musst du die compare-Methode implementieren. In dieser Methode kannst du dann vergleichen.

Für kleiner gibst du dann -1, für gleich 0 und für größer 1 zurück.

Gruß

Sascha
 
ich habs mir jetzt so überlegt, dass ich es doch mit implementiere, und dann eine compareTo methode erstelle. sieht dann so aus.
Code:
	public int compareTo(Object o)
	{
		Brawler theOtherBrawler = Brawler(o);
		if (this.getSpeed() == theOtherBrawler.getSpeed())
			return 0;
		else if(this.getSpeed() > theOtherBrawler.getSpeed())
			return 1;
		else
			return -1;
	}

das ist dann in der Klasse enthalten die dann Comparable implementiert.
Oder muss ich das so machen :
Code:
class BrawlCompare extends Brawler implements Comparable{...}
?
 
Nee nee, ich bin heute verstrahlt. ;-)
Comparable ist richtig und bei deiner Brawler-Klasse implementieren ist richtig. Du hast es richtig implementiert.
So musst du es nicht machen.
Code:
class BrawlCompare extends Brawler implements Comparable{...}

Beim meinem letzten Post hab ich an den Comparator gedacht. Das wäre auch noch eine Möglichkeit gewesen.

Gruß

Sascha
 
Hmmm. Ich glaub langsam ich bin zu blöd dafür xD
habe jetzt diesen code hier benutzt fürs compareTo
Code:
	public int compareTo(Object o)
	{
		Brawler otherBrawler = (Brawler) o;
		if (this.getSpeed() == otherBrawler.getSpeed())
			return 0;
		else if(this.getSpeed() > otherBrawler.getSpeed())
			return 1;
		else
			return -1;
	}

und zum testen
Code:
	System.out.println((BattleList.get(0)).compareTo(BattleList.get(1)));
BattleList ist die ArrayList, die die Brawler enthält.
Nur bekomm ich dann jedes mal beim kompilieren:

cannot find symbol method compareTo(Brawler).

dann hab ich mir überlegt den code so zu verändern, dass es so aussieht:
Code:
	public int compareTo(Brawler otherBrawler)
	{

		if (this.getSpeed() == otherBrawler.getSpeed())
			return 0;
		else if(this.getSpeed() > otherBrawler.getSpeed())
			return 1;
		else
			return -1;
	}

nur dann erhalte ich jedes mal beim kompilieren der Klasse
Brawler is not abstract and does not override abstract method compareTo(java.lang.object) in java.lang.comparable.

wenn ich die klasse dann abstrakt definiere
Code:
public abstract class Brawler implements Comparable{...}
erhalte ich beim kompilieren des eigentlichen Spiels wiederum dieselbe Fehlermeldung wie vorher:

cannot find symbol method compareTo(Brawler)

Habe also jetzt wirklich keine ahnung mehr wie ich dass jetzt coden muss damit es funktioniert :/
 
Ich bin einfach nur ein Vollidiot.
Ich hatte ein BackUp gespeichert, und die Brawler Klasse aus dem BackUp offen, aber den Runner in einem anderen Ordner. Kein Wunder, dass der die Methode nicht finden konnte, sie war ja auch gar nicht da :D.
Vielen Dank trotzdem für die Hilfe, Problem ist jetzt gelöst.
Collections.sort(BattleList) sortiert es jetzt genau wie es sein soll :D
 
Zurück