Ponownie problem z sortowaniem

0

Wraca do problemu z sortowaniem Stringow. Problem polega na tym ze mam do posortowania ArrayListe obiektów ktore chce posortowac wedle atrybutu numer. Numer jest typu string. Natomiast wartosci numer obiektów wyrazane sa liczbowo jednak to dalej String Czyli np 1,2,3....11.
Chce sortowac je od najwieksze wiec, metoda ktorej uzywam daje rwzultat taki:
10,11,12,9,8,7,6,5,4,3,2,1 Czyli jak widac prawidlowy dal String jednak nie prawidlowy dla stringów ktore reprezentuja liczby.
Czy jest jakiś sposob na dobre posortowanie w takiej sytuacji, czy musze zmieniac wszystko na int. Jesli muse to jaka jest nmetoda na sortowanei malejące tablicy obiektów int?

Dzięki za pdpowiedz ;)

0

Musisz parsowac, inaczej sortowanie stringow zawsze takie bedzie, chyba ze sam to zmienisz, ale i tak nie obedzie sie bez parsowania :-P
Nie wiem czym sortujesz (Arrays.sort()?) ale najlepiej pewnie bedzie implementowac Comparator<TwojaKlasa>, wybrac te atrybuty po ktorych chcesz sortowac, sparsowac i porownac.

0

Mam tak:

class SortujWgNumeru implements Comparator<Zlecenie>
{
public int compare(Zlecenie o1, Zlecenie o2)
{return -(o1._numer.compareTo(o2._numer));}
}

Collections.sort(zlecenia,new SortujWgNumeru());
for(Zlecenie dos:zlecenia ) System.out.println(dos._numer);

Co powinienem zrobić?

0

No wusisz sparsowac Stringi na inty:

public int compare(Zlecenie o1, Zlecenie o2) {
    int z1 = Integer.parseInt(o1._numer);
    int z2 = Integer.parseInto(o2._numer);
    if (z1 > z2) {
        return 1;
    } else if (z1 < z2) {
        return -1;
    }
    return 0;
}

If / else mam po to ze w skrajnych przypadkach wykorzystanie return z1 - z2 moze dawac bledne wyniki (overflow) a ten da zawsze poprawne. Dla przykladu:
z1 = Integer.MIN_VALUE
z2 = 10
z1 < z2 ale
z1 - z2 daje bardzo duza liczbe dodatnia. To co napisalem zawsze dobrze zadziala.
Zasada jest taka ze gdy bezwzgledna wartosc z1 + bezwzgl wartosc z2 daje liczbe wieksza niz bezwzgl wartosc z Integer.MIN_VALUE, z1 - z2 bedzie niepoprawna.
Pozdro.

0

Działa świetnie. wielkie dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1