背景
今天由於要使用多線程,所以事先需要確定啟動線程個數。於是需要先將集合進行分配,確定線程的個數。
解決方案
首先是實現
public static <T> List<List<T>> splitList(List<T> list, int blockSize) { List<List<T>> lists = new ArrayList<List<T>>(); if(blockSize == 1){ lists.add(list); return lists; } if (list != null && blockSize > 0) { int listSize = list.size(); if(listSize<=blockSize){ lists.add(list); return lists; } int batchSize = listSize / blockSize; int remain = listSize % blockSize; for (int i = 0; i < batchSize; i++) { int fromIndex = i * blockSize; int toIndex = fromIndex + blockSize; System.out.println("fromIndex=" + fromIndex + ", toIndex=" + toIndex); lists.add(list.subList(fromIndex, toIndex)); } if(remain>0){ System.out.println("fromIndex=" + (listSize-remain) + ", toIndex=" + (listSize)); lists.add(list.subList(listSize-remain, listSize)); } } return lists; }
其次是調用
List<List<String>> sublists = splitbList(transNoList, nCount/ThreadCount);
我們可以看到,返回的結構List<List<T>>的每一個元素都是一個list對象,即每一個分配好的小集合 :)