2012-07-16 2 views
0

Mon programme crée une liste de 5000 à 60000 enregistrements en fonction de l'heure de la journée. Je veux diviser en autant d'arraylists que possible que chaque arraylist aura 1000 dossiers. J'ai regardé beaucoup d'exemples en ligne et essayé quelques choses mais j'ai rencontré des problèmes étranges. Pouvez-vous s'il vous plaît me montrer un exemple de cela?Division d'une liste en plusieurs arborescences

Cordialement!

+1

Où est le code – Jeffrey

Répondre

2
public static <T> Collection<Collection<T>> split(Collection<T> bigCollection, int maxBatchSize) { 
    Collection<Collection<T>> result = new ArrayList<Collection<T>>(); 

    ArrayList<T> currentBatch = null; 
    for (T t : bigCollection) { 
     if (currentBatch == null) { 
     currentBatch = new ArrayList<T>(); 
     } else if (currentBatch.size() >= maxBatchSize) { 
     result.add(currentBatch); 
     currentBatch = new ArrayList<T>(); 
     } 

     currentBatch.add(t); 
    } 

    if (currentBatch != null) { 
     result.add(currentBatch); 
    } 

    return result; 
    } 

Voilà comment nous l'utilisons (en supposant des e-mails un grand ArrayList d'adresses e-mail:

Collection<Collection<String>> emailBatches = Helper.split(emails, 500); 
    for (Collection<String> emailBatch : emailBatches) { 
     sendEmails(emailBatch); 
     // do something else... 
     // and something else ... 
    } 
} 

où emailBatch serait itérer sur la collection comme ceci:

private static void sendEmails(Collection<String> emailBatch){ 
    for(String email: emailBatch){ 
     // send email code here. 
    } 
} 
+0

Il ressemble à cela fonctionne, mais comment pourrais-je extraire des données d'une collection ? Je n'ai jamais utilisé de collections auparavant. – Arya

+0

Vous avez. :) L'ArrayList est une collection. Très probablement, vous aurez envie de parcourir la collection. J'ai ajouté un exemple d'utilisation. –

1

Vous pouvez utiliser le subListhttp://docs.oracle.com/javase/6/docs/api/java/util/List.html#subList de List pour diviser votre ArrayList. La sous-liste vous donnera une vue de la liste originale. Si vous voulez vraiment créer une nouvelle liste, séparée de l'ancien, vous pouvez faire quelque chose comme:

int index = 0; 
int increment = 1000; 
while (index < bigList.size()) { 
    newLists.add(new ArrayList<Record>(bigList.subList(index,index+increment)); 
    index += increment; 
} 

Notez que vous devrez vérifier au large par une erreur ici. Ceci est juste un échantillon de pseudocode rapide.

+0

Je pense que l'OP veut 5-60 séparer 'ArrayList's contenant 1000 enregistrements chacun.No 5-60' ArrayList's qui fournissent des vues différentes du même tableau de 5000-60000 enregistrements – Jeffrey

+0

Bon point, j'ai mis à jour mon code pour refléter cela. –

+0

Ce code ne sera pas compilé. Je pense que vous vouliez dire 'new ArrayList <> (bigList.subList (index, index + incrément))'. – Jeffrey