Sort List in java

5

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?

    
asked by anonymous 15.07.2015 / 18:29

3 answers

6

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

    
15.07.2015 / 18:46
2
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);
        }
    });
    
15.07.2015 / 18:45
2

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());  
            }  

     });  
    }  
    
15.07.2015 / 18:48