2013-05-25 16 views
8

Mam ArrayList zombie, który jest wypełniony obiektem o nazwie Zombie. Zombie ma atrybuty health, x, y. Jak posortować tablicę w porządku rosnącym, używając atrybutu x z Zombie, który ma początkowo mieć wartości losowe?Sortowanie obiektu ArrayList według wartości atrybutu w Javie

Znalazłem już możliwe solution do mojego problemu, ale nie rozumiem składni odpowiedzi. Objaśnienie tej odpowiedzi również może pomóc.

Odpowiedz

23

Chcesz użyć Collections.sort w połączeniu z niestandardowym Comparator.

Collections.sort(list, new Comparator<Zombie>() { 
    @Override 
    public int compare(Zombie z1, Zombie z2) { 
     if (z1.x() > z2.x()) 
      return 1; 
     if (z1.x() < z2.x()) 
      return -1; 
     return 0; 
    } 
}); 

Zasadniczo, Comparator jest kluczem, który oznacza, jak lista powinna być zamawiane poprzez jego metody compare. Z powyższego Comparator uważamy z1 być większa niż z2 jeśli z1 ma wyższą wartość x (a my pokazujemy to wracając 1). Na tej podstawie sortujemy list.

+0

Dziękuję za wyjaśnienie i odpowiedź, ale można przejść bardziej szczegółowe w rozumieniu wszystkiego? Jeśli mógłbyś mi wyjaśnić każdą linię kodu i wyjaśnić, co dokładnie się dzieje, byłoby to bardzo pomocne. – user2414341

+0

@ user2414341 Gotowe. –

+0

Tak niesamowicie brzydki, ale działa. To wygląda na jedyny sposób na zrobienie tego rodzaju sortowania (podobna odpowiedź w całym Internecie). –

3

za pomocą JAVA 8 to zrobić:

zombie.sort((Zombie z1, Zombie z2) -> { 
    if (z1.x() > z2.x()) 
    return 1; 
    if (z1.x() < z2.x()) 
    return -1; 
    return 0; 
}); 

interfejs List teraz obsługuje metodę sortowania bezpośrednio

Powiązane problemy