Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中按属性值对对象ArrayList排序_Java_Sorting_Object_Arraylist - Fatal编程技术网

Java中按属性值对对象ArrayList排序

Java中按属性值对对象ArrayList排序,java,sorting,object,arraylist,Java,Sorting,Object,Arraylist,我有ArrayList zombie,其中填充了一个名为zombie的对象僵尸具有属性健康,x,y。如何使用Zombie的属性x对数组进行升序排序,该属性最初设置为具有随机值 我已经找到了解决问题的可能方法,但我不理解答案的语法。解释这个答案也可能会有所帮助。您希望与自定义应用程序结合使用 Collections.sort(列表,新比较器(){ @凌驾 公共整数比较(僵尸z1,僵尸z2){ 如果(z1.x()>z2.x()) 返回1; 如果(z1.x()中,我们认为 Z1 < /代码>大于 Z2

我有
ArrayList zombie
,其中填充了一个名为
zombie
的对象<代码>僵尸具有属性
健康
x
y
。如何使用
Zombie
的属性
x
对数组进行升序排序,该属性最初设置为具有随机值

我已经找到了解决问题的可能方法,但我不理解答案的语法。解释这个答案也可能会有所帮助。

您希望与自定义应用程序结合使用

Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(僵尸z1,僵尸z2){
如果(z1.x()>z2.x())
返回1;
如果(z1.x()
本质上,
Comparator
是一个键,表示列表应该如何通过其
compare
方法排序。在上面的<代码>比较器< /代码>中,我们认为<代码> Z1 < /代码>大于<代码> Z2< /代码>如果<代码> Z1 < /代码>具有更高的<代码> x值(我们通过返回<代码> 1 来显示)。基于此,我们使用JAVA 8排序
列表

执行以下操作:

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

列表界面现在直接支持排序方法

这很旧,但我发现它很有用

zombie.sort((Zombie z1,Zombie z2) -> (Integer.compare(z1.x(),z2.x())));
同样有效。

Java-8解决方案使用: 如果要对原始列表进行排序,
zombie
本身: 如果
x
int
类型,惯用的方法是使用


谢谢你的解释和回答,但是你能更深入地了解每件事的意义吗?如果你能向我解释每一行代码,并解释到底发生了什么,那将是非常有帮助的。非常难看,但它是有效的。这似乎是进行此类排序的唯一方法(网络上都有类似的答案)。为什么要使用2个if,而不是一个else if?@orrymr在这种情况下,这并不重要,因为
返回值
;你可以用任何一种方法。
zombie.sort((Zombie z1,Zombie z2) -> (Integer.compare(z1.x(),z2.x())));
List<Zombie> sorted = zombie.stream()
                            .sorted(Comparator.comparing(Zombie::getX))
                            .collect(Collectors.toList());
List<Zombie> sorted = zombie.stream()
                            .sorted(Comparator.comparingInt(Zombie::getX))
                            .collect(Collectors.toList());
zombie.sort(Comparator.comparing(Zombie::getX));
zombie.sort(Comparator.comparingInt(Zombie::getX));