我有各种各样的物品“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排序;
非常感谢!!!
答案 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}},你就会知道两个对象是平等的。