2016-02-10 16 views
6

Mam ArrayList, która może zawierać nieograniczoną liczbę obiektów. Muszę wyciągnąć 10 przedmiotów na raz i wykonać na nich operacje.Najlepszy sposób na pobieranie elementów z tablicy 10 na raz

Co mogę sobie wyobrazić, to robienie tego.

int batchAmount = 10; 
for (int i = 0; i < fullList.size(); i += batchAmount) { 
    List<List<object>> batchList = new ArrayList(); 
    batchList.add(fullList.subList(i, Math.min(i + batchAmount, fullList.size())); 
    // Here I can do another for loop in batchList and do operations on each item 
} 

Jakieś myśli? Dzięki!

+0

Twoje rozwiązanie już nie działa? –

+0

To powinno, ale chciałem poznać opinię innych ludzi na temat lepszych sposobów osiągnięcia tego. – mkki

Odpowiedz

3

można zrobić coś takiego:

int batchSize = 10; 
ArrayList<Integer> batch = new ArrayList<Integer>(); 
for (int i = 0; i < fullList.size();i++) { 
    batch.add(fullList.get(i)); 
    if (batch.size() % batchSize == 0 || i == (fullList.size()-1)) { 
     //ToDo Process the batch; 
     batch = new ArrayList<Integer>(); 
    } 
} 

Problem z bieżącej realizacji jest to, że podczas tworzenia batchList w każdej iteracji, trzeba będzie zadeklarować tę listę (batchList) poza pętli . Coś takiego:

int batchAmount = 10; 
List<List<object>> batchList = new ArrayList(); 
for (int i = 0; i < fullList.size(); i += batchAmount) { 
    ArrayList batch = new ArrayList(fullList.subList(i, Math.min(i + batchAmount, fullList.size())); 
    batchList.add(batch); 
} 
// at this point, batchList will contain a list of batches 
+0

dzięki za złapanie mojego wdrożenia. Podoba mi się twoja implementacja tego. – mkki

0

Aby wyciągnąć element z ArrayList: ArrayList.remove(0)

// clone the list first if you need the values in the future: 
ArrayList<object> cloned = new ArrayList<>(list); 
while(!list.isEmpty()){ 
    object[] tmp = new object[10]; 
    try{ 
     for(int i = 0; i < 10; i++) tmp[i] = list.remove(0); 
    }catch(IndexOutOfBoundsException e){ 
     // end of list reached. for loop is auto broken. no need to do anything. 
    } 
    // do something with tmp, whose .length is <=10 
} 
Powiązane problemy