Problem mit Comparator

plueschi

Grünschnabel
Hallo!

Ich habe einen Problem mit dem Comaparator und komme einfach nicht drauf woran es liegt. Die letzten Einträge der ArrayList, die ich mit Collections.sort(list, comp) sortieren will, sind nicht richtig sortiert.
Vielleicht kann mir ja jemand von euch helfen.
Danke
lg tom
Code:
public class ComparatorforArbeitsgaenge implements Comparator<Arbeitsgang> {
//

    @Override
    public int compare(Arbeitsgang ag1, Arbeitsgang ag2) {

        String name1 = ag1.getZugehoerigerarbeitsplan().getName();
        String name2 = ag2.getZugehoerigerarbeitsplan().getName();
        int number1 = ag1.getVorgangsnummer();
        int number2 = ag2.getVorgangsnummer();

        if (name1.compareTo(name2) == -1) {
            return -1;
        }

        if (name1.compareTo(name2) == 1) {
            return 1;
        }

        if (name1.compareTo(name2) == 0) {
            if (number1 < number2) {
                return -1;
            }
            if (number1 > number2) {
                return 1;
            }
        }

        return 0;
    }
}

Update: name1 und name2 sind als String gespeicherte Zahlen, wenn ich diese durch Buchstaben ersetzte funktioniert das Ding einwandfrei...
 
Zuletzt bearbeitet:
Bei name1.compareTo(name2) muss nicht unbedingt -1 oder 1 rauskommen. Es kann auch ein größerer Wert sein. Allgemein muss bei einem compareTo kein -1 bzw. +1 zurückkommen. Es ist nur oftmals der Fall.

Ich mach das immer so:

Java:
int tmp = name1.compareTo(name2);
if(tmp != 0){
    return tmp;
}
            if (number1 < number2) {
                return -1;
            }
            if (number1 > number2) {
                return 1;
            }
return 0;
 
Moin,

Anime-Otaku hat Recht - einer der Gründe, warum ist zum Vergleich von Strings die Methode "equals" bevorzuge, die einen bool'schen Wert zurückliefert :

public boolean equals(Object anObject)
Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.

Gruß
Klaus
 
Zuletzt bearbeitet:
Danke
Hab grad in der API nachgelesen, da stehts eigentlich eh drinnen... Sollte man manchmal vielleicht genauer lesen *g*

lg Tom
 

Neue Beiträge

Zurück