2013-05-25 250 views
8

我有ArrayList zombie,其中填充了名爲Zombie的對象。 Zombie具有屬性health,x,y。我將如何使用Zombiex屬性以升序對數組進行排序,該屬性最初設置爲隨機值?使用Java中的屬性值對對象ArrayList進行排序

我已經找到可能的solution對我的問題,但我不明白答案的語法。同樣,解釋這個答案也可能有幫助。

回答

23

您想要將Collections.sort與自定義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; 
    } 
}); 

從本質上講,一個Comparator是表示如何名單應通過其compare方法進行排序的關鍵。通過上面的Comparator,我們認爲z1更大超過z2如果z1具有較高的x值(和我們顯示此通過返回1)。基於此,我們對list進行了排序。使用

+0

感謝您對此的解釋和答案,但你可以去更深入到一切的意義?如果你能向我解釋每一行代碼,並解釋究竟發生了什麼,那將是最有幫助的。 – user2414341

+0

@ user2414341完成。 –

+0

令人難以置信的醜陋,但它的作品。這看起來就像做這種排序的唯一方法(網絡上的相似答案)。 –

3

JAVA 8做到這一點:現在

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

List接口支持排序方法直接

相關問題