为了使用并发计算,有时候须要对list作拆分。而java中默认的subList方法知足不了这种需求,那就本身动手写一个吧。java
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<T> { public List<List<T>> split(List<T> sList, int num) { List<List<T>> eList = new ArrayList<List<T>>(); List<T> 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<T>(); for (j = xx; j < (size + xx); j++) { gList.add(sList.get(j)); } xx = j; eList.add(gList); } if (size2 != 0) { gList = new ArrayList<T>(); 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<String> ll = Lists.newArrayList("a","b","c","d","e"); ListSplit<String> ls = new ListSplit<String>(); //把list平均拆分红2个,若不能平均拆分,多出的一个会单独保存到一个list中。 List<List<String>> li = ls.SplitList(ll, 2); for(List<String> l : li){ System.out.println(Arrays.toString(l.toArray()));//打印出被拆分后的每一个list中的值 } } }
输出:python