Wpis z mikrobloga

#java #naukaprogramowania

Czy ktoś jest mi w stanie wytłumaczyć dlaczego moja lista obiektów Purchase (String id, String name), nie sortuje się poprawnie w przypadku takiego samego name? W takim przypadku powinienem napisać kod, który posortuje je rosnąco według id.

Błąd najprawdopodobniej jest gdzieś w tej części kodu:

Collections.sort(purchaseList, new Comparator() {
public int compare(Purchase p1, Purchase p2) {

if(p1.name != p2.name) { //rozne nazwiska
return p1.name.compareTo(p2.name);
}else { //te same nazwiska
return p1.id.compareTo(p2.id);
}
}
});

Np. dla:

c00003 Kowalski
c00001 Kowalski

powinno posortowac:

c00001 Kowalski
c00003 Kowalski

A u mnie c00003 pozostaje pierwsze.
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Czy ktoś jest mi w stanie wytłumaczyć dlaczego moja lista obiektów Purchase (String id, String name), nie sortuje się poprawnie w przypadku takiego samego name?


@Ludzik_Lego: bo używasz operatora != zamiast metody equals
  • Odpowiedz
via Wykop Mobilny (Android)
  • 1
@Ludzik_Lego:
Używanie equals przy pisaniu Comparatora jest jakieś takie dziwne.
Nie lepiej Comparator.comparing(Putchase::getName).thenComparing(Purchase::getId)?
  • Odpowiedz
@Ludzik_Lego: Nie wiem czy zbytnio nie wyprzedzam toku nauki ale polecam zainteresować się fajnymi i wygodnymi metodami do tworzenia komparatorów. Weszły w javie 8 tak więc starsze tutoriale często je pomijają. Tutaj przykładowy artykuł na ten temat: http://www.baeldung.com/java-8-comparator-comparing
Dzięki temu mógłbyś zastąpić swój kod poprzez:
Collections.sort(purchaseList, Comparator.comparing(Purchase::getName).thenComparing(Purchase::getId))
  • Odpowiedz