通过Java中的属性值对对象ArrayList进行排序

时间:2013-05-25 16:23:21

标签: java sorting object arraylist

我有ArrayList zombie,其中填充了一个名为Zombie的对象。 Zombie具有healthxy属性。如何使用x的{​​{1}}属性按升序对数组进行排序,该属性设置为最初具有随机值?

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

4 个答案:

答案 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)

使用 Stream API 的 Java-8 解决方案:

List<Zombie> sorted = zombie.stream()
                            .sorted(Comparator.comparing(Zombie::getX))
                            .collect(Collectors.toList());

如果 xint 类型,惯用的方式是使用 Comparator.comparingInt

List<Zombie> sorted = zombie.stream()
                            .sorted(Comparator.comparingInt(Zombie::getX))
                            .collect(Collectors.toList());

如果要对原始列表进行排序,zombie 本身:

zombie.sort(Comparator.comparing(Zombie::getX));

如果 xint 类型,惯用的方式是使用 Comparator.comparingInt

zombie.sort(Comparator.comparingInt(Zombie::getX));