Ordenar Usando o ArrayList[RESOLVIDO]

5 respostas
J

boa tarde

gostaria de saber como eu faria para conseguir ordenar usando o Arraylist com tipos diferentes
segue o codigo abaixo:

import java.util.*;

class Lista{
 String Nome;
 int 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 int getnumero(){ return numero;}	
      
      public void Setnumero(int numero){this.numero=numero;}
	  
	  public String toString(){
	     return this.Nome+" "+this.numero;}
	  
	  
}	  
class ordena extends Lista implements Comparable<Lista> {

 public ordena(String n,int m){
	    super(n,m);
		 }
public int compareTo(Lista outra) {
    if (this.numero < outra.numero) {
       return -1;
      }
   if (this.numero > outra.numero) {
         return 1;
           }
           return 0;
           }
 }
 
public class teste{
  public static void main(String args[]){
     Lista t1,t2,t3;
     List <Lista> lista=new ArrayList<Lista>();
	 t1=new Lista("Sérgio",2);
	 t2=new Lista("Sérgio",1);
	 t3=new Lista("Sérgio",3);
	 
	 lista.add(t1);
     lista.add(t2);
     lista.add(t3);
	 
	 System.out.println(lista); 
	 
     Collections.sort(lista);
	 
     System.out.println(lista);
	 }
}

da erro direto

5 Respostas

lele_vader

Qual o erro que dá ?

F

Implementa o comparable direto na classe Lista.

public class Lista implements Comparable<Lista> {  
String Nome;  
int 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 int getnumero(){ return numero;}     
        
      public void Setnumero(int numero){this.numero=numero;}  
        
      public String toString(){  
         return this.Nome+" "+this.numero;}

    @Override
    public int compareTo(Lista o) {
        if (this.numero < o.numero) {
            return -1;
        }
        if (this.numero > o.numero) {
            return 1;
        }
        return 0;
    }       
        
}

Ve se funciona.

J

Valeu Funcionou,mas se fosse para ordenar por nome com eu faria?
po vlw msm

F

Olha só. O método sort tem uma sobrecarga que aceita um Comparator. Se vc quer fazer várias ordenações eu acho que seria legal ter todas implementadas. por exemplo.

public static void main(String[] args) {
        Lista t1,t2,t3;  
     List<Lista> lista=new ArrayList<Lista>();  
     t1=new Lista("térgio",2);  
     t2=new Lista("Sérgio",1);  
     t3=new Lista("Sérgio",3);  
       
     lista.add(t1);  
     lista.add(t2);  
     lista.add(t3);  
       
     System.out.println(lista); 
     
     ordenaPorNome(lista);
       
     System.out.println(lista);
     
     ordenaPorNumero(lista);
     
     System.out.println(lista);
    }
    
    // Para ordenar por nome
    private static void ordenaPorNome(List<Lista> lista) {
        Collections.sort(lista, new Comparator<Lista>() {
            @Override
            public int compare(Lista o1, Lista o2) {
                return o1.getNome().compareTo(o2.getNome());
            }
         
     });
    }
    
    // Para ordenar por numeros
    private static void ordenaPorNumero(List<Lista> lista) {
        Collections.sort(lista, new Comparator<Lista>() {
            @Override
            public int compare(Lista o1, Lista o2) {
                return o1.getnumero().compareTo(o2.getnumero());
            }
         
     });
    }

E a classe list não precisa implementar nada. Também troque o seu numero (int) para Integer. Acho que assim ficaria melhor.

J

po vlw funcionou certinho :lol:

Criado 1 de maio de 2012
Ultima resposta 1 de mai. de 2012
Respostas 5
Participantes 3