我有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));