package com.xy.cn;
import java.util.*;
public class ColletionUtil {
/**
* 数据分段处理
* @param collection(list, set , queue...) 待处理数据集合
* @param perCount 多少条数据为一组
* @return
*/
public static Map<Integer, List<?>> doSegment(Collection<?> collection, int perCount){
if(collection==null || collection.size()==0 || perCount<=0){
return null;
}
int size = collection.size();
int times = size%perCount==0 ? size/perCount : size/perCount+1;
Object[] objects = collection.toArray();
Map<Integer, List<?>> map = new HashMap<>(times);
int begin,end;
for (int i = 1; i <=times; i++) {
List<Object> segmentList = new ArrayList<>(perCount);
end = i==times ? size : i*perCount;
System.out.println("("+(i-1)*perCount+","+(end-1)+")");
for (begin = (i-1)*perCount; begin < end; begin++) {
segmentList.add(objects[begin]);
}
map.put(i, segmentList);
}
return map;
}
public static void main(String[] args) {
// 测试案例1
List<String> list = new ArrayList<>();
for (int i = 0; i < 30; i++) {
list.add("code"+i);
}
Map<Integer, List<?>> map = doSegment(list, 9);
for (Map.Entry<Integer, List<?>> entry : map.entrySet()) {
System.out.println(entry.getKey() + "," + entry.getValue());
}
// 测试案例2
Set<User> set = new HashSet<>();
for (int i = 0; i < 30; i++) {
set.add(new User("name"+i));
}
Map<Integer, List<?>> map2 = doSegment(set, 9);
for (Map.Entry<Integer, List<?>> entry : map2.entrySet()) {
System.out.println(entry.getKey() + "," + entry.getValue());
}
}
}
案例测试结果:
测试案例1
(0,8)
(9,17)
(18,26)
(27,29)
1,[code0, code1, code2, code3, code4, code5, code6, code7, code8]
2,[code9, code10, code11, code12, code13, code14, code15, code16, code17]
3,[code18, code19, code20, code21, code22, code23, code24, code25, code26]
4,[code27, code28, code29]
测试案例2
(0,8)
(9,17)
(18,26)
(27,29)
1,[User{name='name25'}, User{name='name14'}, User{name='name17'}, User{name='name26'}, User{name='name3'}, User{name='name12'}, User{name='name6'}, User{name='name8'}, User{name='name29'}]
2,[User{name='name10'}, User{name='name18'}, User{name='name16'}, User{name='name2'}, User{name='name19'}, User{name='name21'}, User{name='name1'}, User{name='name13'}, User{name='name23'}]
3,[User{name='name0'}, User{name='name11'}, User{name='name24'}, User{name='name5'}, User{name='name15'}, User{name='name4'}, User{name='name28'}, User{name='name20'}, User{name='name7'}]
4,[User{name='name22'}, User{name='name9'}, User{name='name27'}]