Multiple sorts with ArrayList

2

I have a question. I want to sort the ArrayList person in different ways.

<%@ page import= "java.util.*"%>

<%! 
public class Pessoa implements Comparable<Pessoa> {  
    String Nome;  
    Integer numero; 

    public  Lista(String n,int m){  
        this.Nome = n;  
        this.numero = m;  
    }  

    public String getNome(){
        return Nome;
    }  
    public void SetNome(String Nome){
        this.Nome = Nome;
    }   
    public Integer getArea(){
        return numero;
    }     
    public void SetArea(int numero){
        this.numero = numero;
    }  
    public String toString(){  
        return this.Nome+" "+this.numero;
    }

    // Para ordenar por nome 
    private static void ordenaPorNome(List<Pessoa> lista) {
    Collections.sort(lista, new Comparator<Pessoa>() {
        @Override
        public int compare(Lista o1, Lista o2) {
            return o1.getNome().compareTo(o2.getNome());
        }
    });
    }
    // Para ordenar por numeros
    private static void ordenaPorNumero(List<Pessoa> lista) {
    Collections.sort(lista, new Comparator<Pessoa>() {
        @Override
        public int compare(Lista o1, Lista o2) {
            return o1.getArea().compareTo(o2.getArea());
        }
    });
    }       

}

%>


<%

    List<Pessoa> lista = new ArrayList<Pessoa>();  
    Lista t1,t2,t3; 
    t1 = new Lista("a",3);  
    t2 = new Lista("b",2);  
    t3 = new Lista("c",1); 

    lista.add(t1);  
    lista.add(t2);  
    lista.add(t3);

    //como chamar o metodo de ordenação aqui ?
    ordenaPorNome(lista);
    System.out.println(lista);

    //como chamar o metodo de ordenação aqui ?
    ordenaPorNumero(lista);
    System.out.println(lista);

%>

I'm using JSP, and it's all in the same file.

Thereafter, there will be an option for the user to choose how to sort, and also add more attributes in the person class to be sorted.

    
asked by anonymous 24.02.2016 / 14:58

2 answers

2

You should use the Comparator interface. And in turn invoke the method Collection.sort (List, Comparator) ;

For example

Collection.sort(list, new Comparator<Pessoa>() {
    public int compare(Pessoa p1, Pessoa p2) {
        return  p1.numero.compareTo(p2.numero);
    }
});

For each attribute you must create Comparator . In Java 8 you can use Lambda expression. If you need examples let us know.

    
24.02.2016 / 15:04
1

Hint : Change sorting methods to public instead of private , so you can use it anywhere else.

To perform the call, the methods are static and are within Person right?

Then it would look like this:

    Pessoa.ordenaPorNome(lista);
    System.out.println(lista);


   Pessoa.ordenaPorNumero(lista);
    System.out.println(lista);
    
24.02.2016 / 15:20