为了使用并发计算,有时候需要对list做拆分。而java中默认的subList方法满足不了这种需求,那就自己动手写一个吧。
package demo18;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import mon.collect.Lists;
/**
* 对List进行拆分,用于分布式计算
*
* @author mengfeiyang
*
*/
public class ListSplit {
List> eList = new ArrayList>();
List gList;
public List> SplitList(List sList, int num) {
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中的值
}
}
}
输出: