Ordenar Usando o ArrayList[RESOLVIDO]

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

Qual o erro que d√° ?

Implementa o comparable direto na classe Lista.

[code]
public class Lista implements Comparable {
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;
}       

} [/code]

Ve se funciona.

1 curtida

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

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.

[code]
public static void main(String[] args) {
Lista t1,t2,t3;
List lista=new ArrayList();
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());
        }
     
 });
}[/code]

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

po vlw funcionou certinho :lol: