Frage von HonkKlonk, 38

Java Arraylist nach einem wert der Objekte ordnen?

Hallo! Hier ein Beispiel Code: 1. Klasse:

import java.util.ArrayList;
import java.util.Random;

 public class Test {
    public static void main(String[] args) {

    ArrayList <Test2> zuOrdnen = new ArrayList<>();
        
    for (int i = 0; i < 6; i++) {
            int put = new Random().nextInt(5);
            zuOrdnen.add(new Test2(put));
        }
        // hier das ordnen
        for (Test2 t : zuOrdnen) {
            System.out.println(t.sortierung);
        }
        System.exit(0);
    }
}

Zweite Klasse:

    public class Test2 {
       public int sortierung;
       public Test2(int sortierung){
          this.sortierung = sortierung;
       }
    }

Wie kann ich jetzt beim "// hier das ordnen" die Arraylist nach der Größe von "sortierung" ordnen (Egal ob mit einer schon Existierenden Klasse oder eigenem Code)?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Willibergi, 27

Dies ist möglich, indem du das Comparable-Interface implementierst und in die compareTo(...)-Methode hineinschreibst, nach was verglichen werden soll.

Anschließend rufst du einfach die statische sort(...)-Methode der Klasse Collection auf.

Näheres dazu findest du hier: 
http://stackoverflow.com/questions/18441846/how-to-sort-an-arraylist-in-java

Ich hoffe, ich konnte dir helfen; wenn du noch Fragen hast, kommentiere einfach.

LG Willibergi

Kommentar von HonkKlonk ,

Ich habe ja keine Arraylist mit Zahlen, sondern mit einer Klasse, die eine Zahl enthält. außerdem kann ja eine Zahl mehrmals auftreten. Könntest du mal ein Codebeispiel bringen?

Kommentar von Willibergi ,

Genau deshalb musst du die compareTo(...)-Methode überschreiben, damit klar ist, anhand welcher Attribute Test2-Objekte verglichen werden müssen,

In deiner überschriebenen Methode sollte also die Instanzvariable sortierung mit der gleichen Instanzvariable der anderen Klasse verglichen werden.

Code-Beispiele hast du mit meinem Link genug.

Alternativ kannst du dich hier hereinlesen: 
http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-p...

LG Willibergi

Expertenantwort
von KnusperPudding, Community-Experte für Java, 5

Du hast zwei Optionen:

Option 1: Deine Klasse Test2 implementiert Comparable, wodurch du gezwungen bist, die Methode: public int compareTo(Test2 o) zu implementieren.

Mögliche Rückgabewerte sind -1, 0 und 1 was für kleiner, gleich und größer steht.  Der Parameter Test2 o hierbei dabei das Vergleichsobjekt mit dem Verglichen wird. 

Ist das der Fall, kannst du via Collections.sort(); die Liste sortieren lassen.

Option 2: Du möchtest Comparable nicht implementieren, also kannst du stattdessen das Interface Comparator verwenden, der letztendlich dasselbe macht, jedoch nicht in der Zielklasse implementiert werden muss, aber letztendlich dasselbe bewirkt:

Collections.sort(list, new Comparator() {

    @Override
    public int compare(Test2 o1, Test2 o2) {
        ...
    }
});
Antwort
von TobiComp, 26

Da es Zahlen sind, kannst du einfach Arrays.Sort(array) benutzen

Kommentar von HonkKlonk ,

könntest du ein Codebeispiel dazu geben?

Kommentar von Willibergi ,

Das wird nicht funktionieren.

Auch wenn es so scheint - in der ArrayList sind Klasseninstanzen, keine Zahlen (s. Generics der ArrayList). Die Zahlen sind als Instanzvariablen in der Klasse Test2 vorhanden, daher muss zuerst die Zahl aus der Klasse abgerufen werden.

LG Willibergi

Keine passende Antwort gefunden?

Fragen Sie die Community