我如何用比较器对此进行排序?

时间:2013-10-03 15:06:59

标签: java arrays sorting comparator

我有各种各样的物品“Equipo”的arraylist, 我必须在各种排序参数中对其进行排序

public class Equipo {

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

if int puntos;是等于按int cantidadPartidosGanados排序;如果那是等于int golesDiferencia;如果是等于按int golesAnotados排序;如果是等于int by golesEnContra;如果是等于按字符串nombre排序;

非常感谢!!!

3 个答案:

答案 0 :(得分:1)

实施Comparable界面,因此您必须将此方法添加到您的课程中:

int compareTo(T o) {
    if (this.puntos > o.puntos)
        return 1;
    else if (this.puntos < o.puntos)
        return -1;
    else
        if (this.cantidadPartidosGanados > o.cantidadPartidosGanados)
            return 1;
        else if (this.cantidadPartidosGanados < o.cantidadPartidosGanados)
            return -1;
        else
          // and so on
}

然后调用Collections类中的sort静态方法,您将对列表进行排序。

答案 1 :(得分:0)

要使用Comparator进行排序,请为Collections.sort()提供匿名实施:

Collections.sort(list, 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();
        // etc for other attributes in order of preference, finishing with
        return a.getNombre().compareTo(b.getNombre());
    }
});

答案 2 :(得分:0)

与其他答案不同,我会采用教育方法,因此您至少可以解决您正在应用的概念。

compareTo(如果您要实现Comparable接口)和基于相同原则的Comparator工作。当第一个元素低于第二个元素时返回小于0的int,当第一个元素高于第二个元素时返回0以上的int或如果它们是0则返回Comparator等于

Comparator提供了一种切换排序条件的简便方法,允许您根据提供的比较器以多种方式对集合进行排序。

定义compare对象后,您必须向int提供行为,根据我之前解释的标准返回Equipo。鉴于If equipo1.field1 != equipo2.field1 compare the fields returning 1 or -1 Else If equipo1.field2 != equipo2.field2 compare the fields returning 1 or -1 Else ... 课程中字段之间的优先级,您的比较必须逐字段完成,如果等于,则切换到下一个字段。在伪代码中,它看起来像这样。

0

最后,如果所有字段都相同,则必须返回String

请注意,当您不使用基本类型(即compareTo)时,您始终可以使用该对象自己的0方法。如果他们的比较返回{{1}},你就会知道两个对象是平等的。