12

我有ArrayList zombie,其中填充了一个名为Zombie. Zombie具有属性health, x, y. 如何使用设置为最初具有随机值的属性x按升序对数组进行排序?Zombie

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

4

4 回答 4

29

您想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具有更高z1x值(我们通过返回 来显示这一点)1。基于此,我们对list.

于 2013-05-25T16:24:18.300 回答
7

使用 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 方法

于 2017-03-30T23:08:53.443 回答
0

这是旧的,但我发现它很有用。

zombie.sort((Zombie z1,Zombie z2) -> (Integer.compare(z1.x(),z2.x())));

也可以。

于 2019-04-11T12:14:48.380 回答
0

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

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));
于 2020-12-29T06:46:12.910 回答