-1

我有各种对象“Equipo”的arraylist,我必须以各种排序参数对其进行排序

public class Equipo {

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

如果 int puntos; is equals sort by int cantidadPartidosGanados; 如果等于按 int golesDiferencia 排序;如果这等于按 int golesAnotados 排序;如果等于,则按 int golesEnContra 排序;如果等于按字符串名词排序;

非常感谢您!!!

4

3 回答 3

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静态方法,您将得到排序的列表。

于 2013-10-03T15:12:24.957 回答
0

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

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

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

最后,如果所有字段都相等,则必须 return 0

请注意,当您不使用原始类型(即String)时,您始终可以使用该对象自己的compareTo方法。如果它们的比较返回,您将知道两个对象相等0

于 2013-10-03T15:25:20.657 回答
0

要使用 a 排序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());
    }
});
于 2013-10-03T15:15:25.470 回答