[JAVA] lijst in blokken verwerken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ZodiacQ
  • Registratie: Maart 2009
  • Laatst online: 27-01 20:51
Hoi,

Ofwel zie ik scheel (en moet ik eventjes pauze nemen...), maar ik zit met het volgende probleem en het lijkt alsof mijn oplossing gewoon te ingewikkeld is.

Ik heb een ArrayList 'tafArray' met hierin URL's die gedownload en verwerkt moeten worden, aangezien deze lijst gegevens van enkele maanden bevat, had ik graag deze lijst per blok van 30 records verwerkt.

Eenvoudig vb: ArrayList heeft 672 records; Dan moet eerst de eerste 30 records verwerkt worden en daarna de volgende 30 records, etc.

Java:
1
2
3
4
5
6
7
8
9
10
11
until (size=671)
{
   for (i = begin ; i = eind ; i++)
   {
      download files;
   }
   verwerk files;

   begin+=30;
   eind+=30
}

Bovenstaande klopt niet 100%, but you catch my drift.


Mijn probeersel (btw er zitten nog lichte fouten in, please ignore :) ):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        if (tafArray.size() < 30)
        {
            for (int i = 0 ; i < tafArray.size() ; i++)
            {
                importFiles(i);
            }                                                   
            
            processRecords();
        }
        else
        {
            boolean gaan = true;
            int totalsize=0;
            int minarray=0;
            int maxarray=0;
            while (gaan == true)
            {
                if (totalsize > 0 && totalsize < 30)
                {
                    maxarray = maxarray + totalsize;
                    gaan = false;
                }
                else
                {
                    maxarray = maxarray + 30;
                }

                for (int j = minarray ; j < maxarray ; j++)
                {
                    importFiles(j);
                }
                            
                processRecords();

                minarray = minarray + maxarray;

                totalsize = tafArray.size() - maxarray;
            }
        }


Weet iemand een eenvoudigere manier?

Acties:
  • 0 Henk 'm!

  • wouwie
  • Registratie: Maart 2007
  • Laatst online: 11-10-2024
zoiets?

Java:
1
2
3
4
5
6
7
8
        int counter = 0;
        for (int i = 0; i < tafArray.length; i++) {
            importFiles(tafArray[i]); 
            if (++counter % 30 == 0) {
                processRecords();     
            }
        }
        processRecords(); 

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Waarom dan niet
Java:
1
2
3
4
5
6
7
        final int BLOCK_SIZE = 30;
        for (int i = 0; i < tafArray.size(); i++) {
            importFiles(tafArray[i]); 
            if ((i % BLOCK_SIZE == BLOCK_SIZE - 1) || (i == tafArray.size() - 1)) {
                processRecords();     
            }
        }

Of iets als
Java:
1
2
3
    for (int i = 0; i < tafArray.size(); i += BLOCK_SIZE) {
        processFiles(tafArray.subList(i, Math.min(i + BLOCK_SIZE, tafArray.size())));
    }

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • ZodiacQ
  • Registratie: Maart 2009
  • Laatst online: 27-01 20:51
Allemaal bedankt voor de reacties, maar ik heb met de code wat gegoocheld, en nu verwerk ik gewoon record per record.

Toch bedankt.

Acties:
  • 0 Henk 'm!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 14-10 14:48
Misschien is de Guava library iets voor je, dan kun je Lists.partition gebruiken. Daar krijg je een lijst van lijsten terug.