Vor einiger Zeit stieß ich auf Arbeit auf ein Problem des JDBC-Treibers für Oracle, der da meldete, daß nur maximal 1000 Parameter an eine Anfrage übergeben werden dürfen. Die Liste mit Parametern war natürlich länger und mußte daher geeignet zerlegt werden. Dafür habe ich den folgenden Algorithmus verwendet:
public static List[] splitList(List largeList, int max) { int sublists = largeList.size() / max; if ((largeList.size() % max) > 0) ++sublists; List[] res = new List[sublists]; for(int i=0; i<sublists; i++) { int from = max * i; int to = Math.min(max * (i+1), largeList.size()); res[i] = largeList.subList(from, to); } return res; }
Die Methode erwartet die zu teilende Liste sowie die Maximalzahl der Elemente pro Teilliste. Als Ergebnis wird ein Array mit allen erzeugten Teillisten geliefert.
Zunächst ermittelt der Algorithmus die Anzahl der notwendigen Teillisten (Zeilen 1 bis 3). Nach Erzeugung des Rückgabewertes wird dann mit Hilfe einer Schleife die Ausgangsliste in die berechnete Anzahl von Teillisten zerlegt (Zeilen 7 bis 11).
