我有ArrayList zombie
,其中填充了一个名为Zombie
的对象。 Zombie
具有health
,x
,y
属性。如何使用x
的{{1}}属性按升序对数组进行排序,该属性设置为最初具有随机值?
我已经找到了问题的solution,但我不明白答案的语法。解释这个答案也可能有所帮助。
答案 0 :(得分:26)
您希望将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
进行排序。
答案 1 :(得分:6)
使用JAVA 8执行此操作:
zombie.sort((Zombie z1, Zombie z2) -> {
if (z1.x() > z2.x())
return 1;
if (z1.x() < z2.x())
return -1;
return 0;
});
列表界面现在直接支持排序方法
答案 2 :(得分:0)
这是旧的,但我发现它很有用。
zombie.sort((Zombie z1,Zombie z2) -> (Integer.compare(z1.x(),z2.x())));
也可以。
答案 3 :(得分:0)
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));