为了使用并发计算,有时候需要对list做拆分。而java中默认的subList方法满足不了这种需求,那就自己动手写一个吧。
package demo18;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import org.python.google.common.collect.Lists;/** * 对List进行拆分,用于分布式计算 * * @author mengfeiyang * */public class ListSplit{ public List
> split(List sList, int num) { List
> eList = new ArrayList
>(); List gList; int size = (sList.size()) / num; int size2 = (sList.size()) % num; int j = 0; int xx = 0; for (int i = 0; i < num; i++) { gList = new ArrayList (); for (j = xx; j < (size + xx); j++) { gList.add(sList.get(j)); } xx = j; eList.add(gList); } if (size2 != 0) { gList = new ArrayList (); for (int y = 1; y < size2 + 1; y++) { gList.add(sList.get(sList.size() - y)); } eList.add(gList); } return eList; } public static void main(String[] args) { //构造一个待拆分的list List ll = Lists.newArrayList("a","b","c","d","e"); ListSplit ls = new ListSplit (); //把list平均拆分成2个,若不能平均拆分,多出的一个会单独保存到一个list中。 List
> li = ls.SplitList(ll, 2); for(List l : li){ System.out.println(Arrays.toString(l.toArray()));//打印出被拆分后的每个list中的值 } }}
输出: