2013-05-25 205 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接口支持排序方法直接

相关问题