2013-05-25 98 views
8

Tôi có ArrayList zombie, được điền bằng một đối tượng có tên là Zombie. Zombie có các thuộc tính health, x, y. Làm cách nào để sắp xếp mảng theo thứ tự tăng dần, sử dụng thuộc tính x của Zombie, được đặt thành ban đầu có giá trị ngẫu nhiên?Sắp xếp đối tượng ArrayList theo giá trị thuộc tính trong Java

Tôi đã tìm thấy solution có thể cho vấn đề của mình, nhưng tôi không hiểu cú pháp của câu trả lời. Giải thích rằng câu trả lời cũng có thể hữu ích.

Trả lời

23

Bạn muốn sử dụng Collections.sort cùng với tùy chỉnh 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; 
    } 
}); 

Về cơ bản, một Comparator là chìa khóa đó có nghĩa như thế nào một danh sách nên được đặt hàng thông qua phương pháp compare của nó. Với số Comparator ở trên, chúng tôi xem xét z1lớn hơn hơn z2 nếu z1 có giá trị x cao hơn (và chúng tôi hiển thị điều này bằng cách trả lại 1). Dựa trên điều này, chúng tôi sắp xếp list.

+0

Cảm ơn bạn đã giải thích này và câu trả lời, nhưng bạn có thể đi sâu hơn vào ý nghĩa của tất cả mọi thứ? Nếu bạn có thể giải thích từng dòng mã cho tôi, và giải thích chính xác những gì đang diễn ra, điều đó sẽ hữu ích nhất. – user2414341

+0

@ user2414341 Xong. –

+0

Rất xấu xí, nhưng nó hoạt động. Điều này giống như cách duy nhất để thực hiện loại sắp xếp này (câu trả lời tương tự trên toàn bộ web). –

3

sử dụng JAVA 8 làm điều này:

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

giao diện bây giờ hỗ trợ các loại phương pháp trực tiếp

Các vấn đề liên quan