2010-08-13 35 views
12

tengo 9 diferentes ArrayList y yo quiero tener una lista de los 5 primerosJava: ¿cómo puedo ordenar múltiples ArrayList por su tamaño?

Estoy pensando en clasificar los ArrayLists por sus tamaños.

¿Es posible hacer eso? Si es así, ¿cómo puedo lograr eso?


Después de algunos intentos, finalmente lo puse en funcionamiento, solo quiero compartirlo con todos.

será mejor para obtener el tamaño de la ArrayList y añadirlo a la gran ArrayList

// creates an ArrayList that holds ArrayLists 
List allTheLists = new ArrayList(); 
allTheLists.add(pbaustraliaList.size()); 
allTheLists.add(pbotherList.size()); 
allTheLists.add(pbunitedStatesList.size()); 
allTheLists.add(pbunitedKingdomList.size()); 
allTheLists.add(pbchinaList.size()); 
allTheLists.add(pbgermanyList.size()); 
allTheLists.add(pbindiaList.size()); 
allTheLists.add(pbjapanList.size()); 
allTheLists.add(pbsingaporeList.size()); 
Comparator comparator = Collections.reverseOrder(); 
Collections.sort(allTheLists,comparator); 

//display elements of ArrayList  
System.out.println("ArrayList elements after sorting in descending order : ");  
for(int i=0; i<allTheLists.size(); i++) {  
    System.out.println(allTheLists.get(i)); 
} 
+0

Usted quiere tener, por ejemplo, la lista más corta primero y el último más largo? – cHao

+0

el más largo primero. Acabo de ver un ejemplo de Justin. Voy a intentar eso primero. gracias chicos =) – user419596

Respuesta

24

Lo que podría hacer es la siguiente:

// this List of lists will need to contain 
// all of the ArrayLists you would like to sort 
List<ArrayList> allTheLists; 
Collections.sort(allTheLists, new Comparator<ArrayList>(){ 
    public int compare(ArrayList a1, ArrayList a2) { 
     return a2.size() - a1.size(); // assumes you want biggest to smallest 
    } 
}); 

Esto ordenará la lista de listas por la longitud de cada lista. El primer elemento en la lista ordenada será la lista más larga, y la última será la más corta.

Luego, puede recorrer las primeras 5 listas para ver cuáles fueron las 5 principales.

Algunos enlaces para la referencia:


Dependiendo de la forma en que tenga su ArrayLists almacenado, el código para crear un List<ArrayList> sería algo como esto:

// creates an ArrayList that holds ArrayLists 
List<ArrayList> allTheLists = new ArrayList<ArrayList>(); 
allTheLists.add(yourList1); 
allTheLists.add(yourList2); 
... 
allTheLists.add(yourList9); 
+1

+1, pero yo usaría List en lugar de ArrayList como parámetro de tipo. – pcjuzer

+0

@pcjuzer, gracias. Yo también lo haría. Pero esto se adapta a las necesidades de la pregunta. – jjnguy

+2

Cambiar todas las instancias de 'ArrayList' a' List 'funciona igual de bien en este caso específico, pero también es más extensible y evita advertencias de tipo sin formato. –

0

se puede hacer como esto, así

public static <T> List<List<T>> sort(List<List<T>> list) { 
     list.sort((xs1, xs2) -> xs1.size() - xs2.size()); 
     return list; 
    } 
Cuestiones relacionadas