我有ArrayList zombie
,其中填充了一个名为Zombie
. Zombie
具有属性health
, x
, y
. 如何使用设置为最初具有随机值的属性x
按升序对数组进行排序?Zombie
我已经找到了解决问题的可能方法,但我不明白答案的语法。解释这个答案也可能会有所帮助。
您想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;
}
});
本质上,aComparator
是一个键,表示应该如何通过其compare
方法对列表进行排序。Comparator
综上所述,我们认为z1
大于ifz2
具有更高z1
的x
值(我们通过返回 来显示这一点)1
。基于此,我们对list
.
使用 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 接口现在直接支持 sort 方法
这是旧的,但我发现它很有用。
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());
如果x
是类型int
,惯用的方式是使用Comparator.comparingInt
.
List<Zombie> sorted = zombie.stream()
.sorted(Comparator.comparingInt(Zombie::getX))
.collect(Collectors.toList());
zombie
本身进行排序:zombie.sort(Comparator.comparing(Zombie::getX));
如果x
是类型int
,惯用的方式是使用Comparator.comparingInt
.
zombie.sort(Comparator.comparingInt(Zombie::getX));