Ordenar ArrayList com mais de um metodo

1 resposta
java
B

Estou com uma duvida…

Eu tenho um arquivo JSP, e nele criei uma class Pessoa.

Logo abaixo da Class, eu crio um ArrayList do tipo Pessoa, e preencho.

Depois eu queria chamar o método de ordenação de acordo com o que o usuário solicitar, se ele escolher ordenar por nome, ai eu chamaria o método ordenar por nome, se for por idade, chamar o método ordena por idade,… e assim por diante. Coloquei só esses dois métodos, mas na verdade tem mais alguns

<%@ 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 
	public 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
	public 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);  
          
     Lista.ordenaPorNome(lista);
     System.out.println(lista); 
%>

1 Resposta

Sandro_Machado

coloque as duas ou mais ordenações dentro de um mesmo método tipo ordenar,
cria um novo parametro do tipo int para reconhecer o tipo de ordenação.

dentro do metodo através if’s e else’s vai determinando qual forma de ordenação,
ficaria mais ou menos assim.

public void ordenar(List<Pessoa> lista, int tipo) {
    if (tipo == 1) {//ordena por nome
        Collections.sort(lista, new Comparator<Pessoa>() {
            //@Override
            public int compare(Lista o1, Lista o2) {
                return o1.getNome().compareTo(o2.getNome());
            }
        });
    } else if (tipo == 2) {//ordena por numeros
        Collections.sort(lista, new Comparator<Pessoa>() {
            //@Override
            public int compare(Lista o1, Lista o2) {
                return o1.getArea().compareTo(o2.getArea());
            }
        });

    } else {
        System.out.println("Opção de ordenação Inválida!");
    }
}

não está compilado é só para ter uma idéia.

Criado 26 de fevereiro de 2016
Ultima resposta 26 de fev. de 2016
Respostas 1
Participantes 2