不能用比较器对数组进行排序

时间:2013-10-03 16:42:21

标签: java arrays sorting comparator

我实现了这种方法来对具有大量属性的团队进行排序 它根据属性是否相等进行排序,然后传递给下一个

这是班级

public class Equipo  implements Comparable<Equipo>{

private String nombre;
private int puntos;
private int cantidadPartidosGanados;
private int golesDiferencia;
private int golesAnotados;
private int golesEnContra;

这是方法

  public void ordenar() {
    Collections.sort(listaEquiposTorneo, new Comparator<Equipo>() {
        public int compare(Equipo a, Equipo b) {
            if (a.getPuntos() != b.getPuntos()) {
                return a.getPuntos() - b.getPuntos();
            }
            if (a.getCantidadPartidosGanados() != b.getCantidadPartidosGanados()) {
                return a.getCantidadPartidosGanados() - b.getCantidadPartidosGanados();
            }
            if (a.getGolesDiferencia() != b.getGolesDiferencia()) {
                return a.getGolesDiferencia() - b.getGolesDiferencia();
            }
            if (a.getGolesAnotados() != b.getGolesAnotados()) {
                return a.getGolesAnotados() - b.getGolesAnotados();
            }
            if (a.getGolesEnContra() != b.getGolesEnContra()) {
                return a.getGolesEnContra() - b.getGolesEnContra();
            }

            return a.getNombre().compareTo(b.getNombre());
        }
    });
}

1 个答案:

答案 0 :(得分:0)

排序仅在比较是对称时才有效。对于项目A和B:

  • 如果A和B的顺序相同,B和A也是如此(compare(b,a)==0暗示compare(a,b)==0
  • 如果A大于B,则B小于A,反之亦然(signum(compare(a,b)) = -signum(compare(a,b)))

如果违反了这种对称性(我认为你的代码就是这种情况),那么排序就会失败。