elk-util-parent/elk-util-collections/src/main/java/org/semanticweb/elk/util/collections/Operations.java
public static <T> Iterable<ArrayList<T>> split(
			final Iterable<? extends T> elements, final int batchSize) {
		return new Iterable<ArrayList<T>>() {

			@Override
			public Iterator<ArrayList<T>> iterator() {
				return new Iterator<ArrayList<T>>() {

					final Iterator<? extends T> elementsIterator = elements
							.iterator();

					@Override
					public boolean hasNext() {
						return elementsIterator.hasNext();
					}

					@Override
					public ArrayList<T> next() {
						final ArrayList<T> nextBatch = new ArrayList<T>(
								batchSize);
						int count = 0;
						while (count++ < batchSize
								&& elementsIterator.hasNext()) {
							nextBatch.add(elementsIterator.next());
						}
						return nextBatch;
					}

					@Override
					public void remove() {
						throw new UnsupportedOperationException(
								"Deletion is not supported");
					}
				};
			}
		};
	}
public static <T> Iterable<ArrayList<T>> split(
			final Iterable<? extends T> elements, final int batchSize) {
		return new Iterable<ArrayList<T>>() {

			@Override
			public Iterator<ArrayList<T>> iterator() {
				return new Iterator<ArrayList<T>>() {

					final Iterator<? extends T> elementsIterator = elements
							.iterator();

					@Override
					public boolean hasNext() {
						return elementsIterator.hasNext();
					}

					@Override
					public ArrayList<T> next() {
						final ArrayList<T> nextBatch = new ArrayList<T>(
								batchSize);
						int count = 0;
						while (count++ < batchSize
								&& elementsIterator.hasNext()) {
							nextBatch.add(elementsIterator.next());
						}
						return nextBatch;
					}

					@Override
					public void remove() {
						throw new UnsupportedOperationException(
								"Deletion is not supported");
					}
				};
			}
		};
	}
public static < T > Iterable < ArrayList < T > > split ( final Iterable < ? extends T > elements , final int batchSize ) { return new Iterable < ArrayList < T > > ( ) { @ Override public Iterator < ArrayList < T > > iterator ( ) { return new Iterator < ArrayList < T > > ( ) { final Iterator < ? extends T > elementsIterator = elements . iterator ( ) ; @ Override public boolean hasNext ( ) { return elementsIterator . hasNext ( ) ; } @ Override public ArrayList < T > next ( ) { final ArrayList < T > nextBatch = new ArrayList < T > ( batchSize ) ; int count = 0 ; while ( count ++ < batchSize && elementsIterator . hasNext ( ) ) { nextBatch . add ( elementsIterator . next ( ) ) ; } return nextBatch ; } @ Override public void remove ( ) { throw new UnsupportedOperationException ( "Deletion is not supported" ) ; } } ; } } ; }
Splits the input {@link Iterable} on batches with at most given number of
elements.

@param elements
the {@link Iterable} to be split
@param batchSize
the maximal number of elements in batches
@return a {@link Iterable} of batches containing elements from the input
collection
@see #concat(Iterable)
Splits the input { @link Iterable } on batches with at most given number of elements .