2012-06-01 8 views
41

Quiero ordenar un ArrayList por una propiedad. Este es mi código ...Android ordenar el arraylist por propiedades

public class FishDB{ 

    public static Object Fish; 
    public ArrayList<Fish> list = new ArrayList<Fish>(); 

    public class Fish{ 
     String name; 
     int length; 
     String LatinName; 
     //etc. 

     public Vis (String name) { 
      this.name = name; 
     } 
    } 

    public FishDB() { 
     Fish fish; 

     fish = new Fish("Shark"); 
     fish.length = 200; 
     fish.LatinName = "Carcharodon Carcharias"; 

     fish = new Fish("Rainbow Trout"); 
     fish.length = 80; 
     fish.LatinName = "Oncorhynchus Mykiss"; 

     //etc. 
     } 
    } 
} 

Ahora quiero en necesidad de solucionar este ArrayList por una propiedad por ejemplo el latinname en otra actividad. Pero no sé cómo hacer eso. ¿Alguien sabe cómo?

+0

intente 'Collections.sort (arrayList);' – Lucifer

+0

@Lucifer Si hace eso, entonces el tipo genérico de su arra yList debe implementar java.lang.Comparable –

Respuesta

115

es necesario implementar un Comparator, por ejemplo:

public class FishNameComparator implements Comparator<Fish> 
{ 
    public int compare(Fish left, Fish right) { 
     return left.name.compareTo(right.name); 
    } 
} 

y luego clasificar así:

Collections.sort(fishes, new FishNameComparator()); 
+0

Gracias, pero todavía tengo un problema. Quiero ordenar el arraylist en una actividad. Al principio se encuentra: publicLISHLIS lista extendsActivity { Y cuando escribo clase pública FishNameComparator implementa Comparador { Da dos errores que dicen: modificador ilegal para la clase local FishNameComparator; solo está permitido el resumen o el final. Y: El tipo FishNameComparator debe implementar el método abstracto heredado Comparator .compare (String, String). Acabo de hacer lo que se encuentra en tu respuesta. – Simon

+2

@ user1380611: Si está implementando esto como una clase anidada, entonces tiene que ser una 'clase estática'. Y eché a perder mi ejemplo, debería ser 'implements Comparator '. –

+0

Funciona perfectamente para mí. Ordena en orden ascendente aquí. –

40

puede simplemente puede hacerlo de la siguiente manera:

Collections.sort(list, new Comparator<Fish>() { 
    public int compare(Fish o1, Fish o2) { 
     return o1.name.compareTo(o2.name); 
    } 
}); 
+0

Ya dijo y aceptó la respuesta de K-ballo – Simon

+7

Sí, pero lo puso en un formato más accesible. –

+1

¡Este es mucho mejor! –

Cuestiones relacionadas