I have List<Pessoa>
where the attributes of the object are: Name, age, address, etc. I have a Screen where I insert people in this list and generate a report, I would like to display this object sorted by Name. How can I do this?
I have List<Pessoa>
where the attributes of the object are: Name, age, address, etc. I have a Screen where I insert people in this list and generate a report, I would like to display this object sorted by Name. How can I do this?
You can implement the Comparable interface and make objects of the person class comparable with other objects of the same type:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Pessoa implements Comparable<Pessoa> {
private String nome;
private int idade;
private String endereco;
//getters and setters
@Override
public int compareTo(Pessoa p) {
return this.getNome().compareTo(p.getNome());
}
@Override
public String toString() {
return "Pessoa [nome=" + nome + ", idade=" + idade + ", endereco="
+ endereco + "]";
}
public static void main(String[] args) {
Pessoa p1 = new Pessoa();
p1.setNome("João");
Pessoa p2 = new Pessoa();
p2.setNome("Maria");
Pessoa p3 = new Pessoa();
p3.setNome("André");
List<Pessoa> pessoas = new ArrayList();
pessoas.add(p1);
pessoas.add(p2);
pessoas.add(p3);
Collections.sort(pessoas);
System.out.println(pessoas);
}
}
Making it possible to call the Collections.sort(pessoas);
method.
Result:
[Person [name = André, age = 0, address = null]
, Person [name = John, age = 0, address = null]
, Person [name = Maria, age = 0, address = null]
]
List<Pessoa> pessoas = new ArrayList<Pessoa>();
// setando
Pessoa pessoa;
for(int i=0;i<100;i++)
{
pessoa = new pessoa();
pessoa.setNome(...);
pessoas.add(pessoa);
}
//Ordenando
Collections.sort(pessoas, new Comparator<Pessoa>() {
@Override
public int compare(Pessoa pessoa1, Pessoa pessoa2)
{
return pessoa1.Nome.compareTo(pessoa2.Nome);
}
});
I imagine that I have already set the attributes so I will leave only the method that does the sort:
The compare accepts a @Override
where you can implement your ordering.
Your class needs to implement the interface Comparator
private static void ordenaPorNome(List<Pessoa> listaPessoas) {
Collections.sort(listaPessoas, new Comparator<Pessoa>() {
@Override
public int compare(Pessoa p1, Pessoa p2) {
return p1.getNome().compareTo(p2.getNome());
}
});
}