package com.litesuits.orm.db.assit; import java.util.ArrayList; import java.util.Collection; /** * 辅助事务 * * @author mty * @date 2013-6-15下午11:09:15 */ public class CollSpliter { /** * 将 collection 拆分成 N 组ArrayList,每组 perSize 个元素,最后一组元素数量未知。 * * {@link Spliter#oneSplit(ArrayList)}将被调用N次,N >= 1. * * @return sum of {@link Spliter#oneSplit(ArrayList)} */ public static <T> int split(Collection<T> collection, int perSize, Spliter<T> spliter) throws Exception { ArrayList<T> list = new ArrayList<T>(); int count = 0; if (collection.size() <= perSize) { list.addAll(collection); count += spliter.oneSplit(list); } else { int i = 0, j = 1; for (T data : collection) { if (i < j * perSize) { list.add(data); } else { count += spliter.oneSplit(list); j++; list.clear(); list.add(data); } i++; } if (list.size() > 0) { count += spliter.oneSplit(list); } } return count; } public interface Spliter<T> { int oneSplit(ArrayList<T> list) throws Exception; } }