【发布时间】:2013-05-21 00:47:42
【问题描述】:
我有ArrayList zombie,其中填充了一个名为Zombie 的对象。 Zombie 具有属性health、x、y。如何使用Zombie 的属性x 对数组进行升序排序,该属性设置为最初具有随机值?
我已经为我的问题找到了可能的solution,但我不明白答案的语法。解释这个答案也可能会有所帮助。
【问题讨论】:
标签: java sorting object arraylist
我有ArrayList zombie,其中填充了一个名为Zombie 的对象。 Zombie 具有属性health、x、y。如何使用Zombie 的属性x 对数组进行升序排序,该属性设置为最初具有随机值?
我已经为我的问题找到了可能的solution,但我不明白答案的语法。解释这个答案也可能会有所帮助。
【问题讨论】:
标签: java sorting object arraylist
您希望将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 具有更高的x 值,我们认为z1 比z2更大(我们通过返回1 来显示这一点)。基于此,我们对list进行排序。
【讨论】:
return;无论哪种方式都可以。
使用 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) -> (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));
【讨论】: