# Ein Array nach einem bestimmten Attribut sortieren



## Developer_X (16. Jan 2010)

Hi. Ich hab mal eine Frage:
Wie kann ich Arrays nach einem Bestimmten Attribut sortieren.

Ich habe zum Beispiel eine Klasse Spieler, ein Array von diesen Spielern, jeder hat unterschiedliche Punkte, Namen, Geschichten und und und.
Nun will ich das Spieler Array gerne nach dem Punkten sortieren.

Wie kann ich das anstellen?

Developer_X


----------



## eRaaaa (16. Jan 2010)

Erstelle einen Comparator(oder implementiere Comparable) und sortiere dann mittels Arrays.sort(array,comparator);
http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#sort(T[], java.util.Comparator)


----------



## Developer_X (16. Jan 2010)

OK, und wie erstell ich einen Comparator und sage ihm, welches Attribut ich in der Klasse meine?
Dieses attribut heitß "z".

Developer_X


----------



## eRaaaa (16. Jan 2010)

Och Mensch:
So z.B.:

```
class PointComparator implements Comparator<Spieler> {

    @Override
    public int compare(Spieler o1, Spieler o2) {
	return o2.getPunkte() - o1.getPunkte();
    }
}
```

Hier mal ein Beispiel:

```
class Spieler {
    private int punkte;
    private String name;

    public Spieler(int punkte, String name) {
	this.punkte = punkte;
	this.name = name;
    }

    public int getPunkte() {
	return punkte;
    }

    @Override
    public String toString() {
	return name + " " + punkte;
    }

    public static void main(String... args) {

	Spieler[] spieler = { new Spieler(0, "Dev-X"),
		new Spieler(11, "spieler2"), new Spieler(3, "spieler3"),
		new Spieler(333, "sieger") };
	System.out.println("Vor Sortierung:");
	System.out.println("-----------");
	for (Spieler spieler2 : spieler) {
	    System.out.println(spieler2);
	}
	Arrays.sort(spieler, new PointComparator());
	System.out.println();
	System.out.println("Nach Sortierung");
	System.out.println("-----------");
	for (Spieler spieler2 : spieler) {
	    System.out.println(spieler2);
	}
    }

}

class PointComparator implements Comparator<Spieler> {

    @Override
    public int compare(Spieler o1, Spieler o2) {
	return o2.getPunkte() - o1.getPunkte();
    }
}
```


----------

