public abstract class PartitionedExecution {
private int size;
private int interval;
private static int DEFAULT_INTERVAL = 100000;
public PartitionedExecution(int size){
this.size=size;
this.interval = DEFAULT_INTERVAL;
}
public PartitionedExecution(int size,int interval){
this.size=size;
this.interval=interval;
}
public void totalRun(){
int cycleIndex = size/interval;
int i = 0;
for(;i<cycleIndex;i++) {
int start = i*interval;
int end = (i+1)*interval;
stepRun(start,end,i);
}
if(size % interval != 0)
stepRun(i*interval,size,i);
}
abstract public void stepRun(int start,int end,int now);
}
当数据非常大的时候,我们就需要进行分块处理,所以本人抽象成此类。希望能帮到需要的人,同时有任何问题都可以发表评论。有错误我一定在第一时间修改。
下面是改进版
public abstract class PartitionedExecution { private int size; private int interval; private static int DEFAULT_INTERVAL = 1000; public PartitionedExecution(int size){ this.size=size; this.interval = DEFAULT_INTERVAL; } public PartitionedExecution(int size,int interval){ this.size=size; this.interval=interval; } public void totalRun(){ int cycleIndex = size/interval; int i = 0; for(;i<cycleIndex;i++) { int start = i*interval; int end = (i+1)*interval; stepRun(start,end,i); } if(size % interval != 0) stepRun(i*interval,size,i); } /** * 当需要用到start,end和now的时候需要重写此方法 * @param start 当前循环的开始 * @param end 当前循环的结束 * @param now 第几次循环 从0开始 */ //abstract public void stepRun(int start,int end,int now); public void stepRun(int start,int end,int now) { for(int i = start;i < end;i++) { stepRun(); } } /** * 如果无需用到start,end和now的可以重写此方法 */ public void stepRun(){ } }