0

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

这是课程

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());
        }
    });
}
4

1 回答 1

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

如果违反了这种对称性(我想您的代码就是这种情况),排序将失败。

于 2013-10-03T16:52:05.957 回答