To do this, you can use the sort
method of the Collections
class. Through it, you can create blockwise ordering logic:
List<Pontuacao> pontuacoes = new ArrayList<>();
pontuacoes.add(new Pontuacao(14, 6, 20));
pontuacoes.add(new Pontuacao(18, 3, 21));
pontuacoes.add(new Pontuacao(14, 6, 22));
pontuacoes.add(new Pontuacao(15, 7, 11));
Collections.sort(pontuacoes, new Comparator<Pontuacao>() {
@Override
public int compare(Pontuacao lhs, Pontuacao rhs) {
if(lhs.getPontos != rhs.getPontos)
return Integer.compare(lhs.getPontos(), rhs.getPontos());
else if(lhs.getVitorias() != rhs.getVitorias())
return Integer.compare(lhs.getVitorias(), rhs.getVitorias());
return Integer.compare(lhs.getSaldoDeGols(), rhs.getSaldoDeGols());
}
});
Your Scoring object can even implement the Comparable<T>
interface to make this code more organized:
class Pontuacao implements Comparable<Pontuacao> {
private int pontos;
private int vitorias;
private int saldoDeGols;
public Pontuacao(int pontos, int vitorias, int saldoDeGols) {
this.pontos = pontos;
this.vitorias = vitorias;
this.saldoDeGols = saldoDeGols;
}
public int getPontos() {
return pontos;
}
public void setPontos(int pontos) {
this.pontos = pontos;
}
public int getVitorias() {
return vitorias;
}
public void setVitorias(int vitorias) {
this.vitorias = vitorias;
}
public int getSaldoDeGols() {
return saldoDeGols;
}
public void setSaldoDeGols(int saldoDeGols) {
this.saldoDeGols = saldoDeGols;
}
@Override
public int compareTo(@NonNull Pontuacao another) {
if(another.getPontos() != getPontos())
return Integer.compare(another.getPontos(), getPontos());
else if(another.getVitorias() != getVitorias())
return Integer.compare(another.getVitorias(), getVitorias());
return Integer.compare(another.getSaldoDeGols(), getSaldoDeGols());
}
}
Then sort is simplified:
List<Pontuacao> pontuacoes = new ArrayList<>();
pontuacoes.add(new Pontuacao(14, 6, 20));
pontuacoes.add(new Pontuacao(18, 3, 21));
pontuacoes.add(new Pontuacao(14, 6, 22));
pontuacoes.add(new Pontuacao(15, 7, 11));
Collections.sort(pontuacoes);