Revista Economía

Cómo ordenar un ArrayList en Java

Publicado el 15 junio 2016 por Elvenbyte @elvenbyte

tabla-de-ordenar-y-clasificar-1949-MLV33451535_474-O1De nuevo trabajando con ArrayList veo algo interesante y práctico que contar al respecto. En este caso se trata de cómo ordenarlos. Los ArrayList no tienen un método concreto para ordenarlos, pero descienden directamente del objeto Collections, y este sí tiene un método sort para ordenar colecciones. ¿Cómo funciona este método? Es un poco complicado, pero lo vemos a continuación, y qué mejor manera que con un ejemplo (como casi siempre extraído de StackOverflow).

Supongamos que tenemos el siguiente objeto:

Java public class Fruit{ private String fruitName; private String fruitDesc; private int quantity; public String getFruitName() { return fruitName; } public void setFruitName(String fruitName) { this.fruitName = fruitName; } public String getFruitDesc() { return fruitDesc; } public void setFruitDesc(String fruitDesc) { this.fruitDesc = fruitDesc; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } }

12345678910111213141516171819202122232425 publicclassFruit{   privateStringfruitName;  privateStringfruitDesc;  privateintquantity;   publicStringgetFruitName(){  returnfruitName;  }  publicvoidsetFruitName(StringfruitName){  thisfruitName=fruitName;  }  publicStringgetFruitDesc(){  returnfruitDesc;  }  publicvoidsetFruitDesc(StringfruitDesc){  thisfruitDesc=fruitDesc;  }  publicintgetQuantity(){  returnquantity;  }  publicvoidsetQuantity(intquantity){  thisquantity=quantity;  }}

Y, por más claridad, lo seteamos de la siguiente manera:

Java List<Fruit> fruits= new ArrayList<Fruit>(); Fruit fruit; for(int i=0;i<100;i++) { fruit = new fruit(); fruit.setname(...); fruits.add(fruit); }

123456789 List<Fruit>  fruits=newArrayList<Fruit>(); Fruit fruit;for(inti=0;i<100;i++){   fruit=newfruit();   fruitsetname();   fruitsadd(fruit);}

Lo que tenemos ahora es una lista desordenada, en la que los elementos se han ido introduciendo según el bucle, es decir en una ordenación pseudonumérica, por decirlo así. Pero nosotros queremos ordenador alfabéticamente por algún campo mucho más práctico, como puede ser la propiedad fruitName que hemos definido en el modelo inicial. Para hacer esto usaremos en primer lugar un recurso comparador (Comparator) y a continuación el método sort del objeto Collections, de la siguiente manera:

Java List<Fruit> fruits= new ArrayList<Fruit>(); Fruit fruit; for(int i = 0; i < 100; i++) { fruit = new Fruit(); fruit.setname(...); fruits.add(fruit); } // Sorting Collections.sort(fruits, new Comparator<Fruit>() { @Override public int compare(Fruit fruit2, Fruit fruit1) { return fruit1.fruitName.compareTo(fruit2.fruitName); } });

12345678910111213141516171819 List<Fruit>fruits=newArrayList<Fruit>(); Fruit fruit;for(inti=0;i<100;i++){  fruit=newFruit();  fruitsetname();  fruitsadd(fruit);} // SortingCollectionssort(fruits,newComparator<Fruit>(){  @Override  publicintcompare(Fruit fruit2,Fruit fruit1)  {   return  fruit1fruitNamecompareTo(fruit2fruitName);  }  });

Y voilá, ya tenemos el ArrayList ordenado por fruitName.

Share

Volver a la Portada de Logo Paperblog