name dateT num
aaa 2011-05-01 05:00 20
aaa 2011-05-01 05:05 21
aaa 2011-05-01 05:10 21
aaa 2011-05-01 05:15 22
aaa 2011-05-01 05:20 23
aaa 2011-05-01 05:25 24
aaa 2011-05-01 05:30 25
aaa 2011-05-01 05:35 26
aaa 2011-05-01 05:40 27
aaa 2011-05-01 05:45 28
aaa 2011-05-01 05:50 29
aaa 2011-05-01 05:55 30
aaa 2011-05-01 06:00 31
bbb 2011-05-01 05:05 32
bbb 2011-05-01 05:10 33
bbb 2011-05-01 05:15 34
bbb 2011-05-01 05:20 35
bbb 2011-05-01 05:25 36
bbb 2011-05-01 05:30 37
bbb 2011-05-01 05:35 381.List<ClassBean> list = new ArrayList<ClassBean>(); //所有的数据放到这个集合里面2.ClassBean是一个JAVABEAN.里面存放了3个属性
private String name;
privete String dateT;
private int num; 需求:
在name相同的情况下.
1.每5分钟合并一条记录num相加
2.每10分钟合并一条记录num相加
3.每30分钟合并一条记录num相加//总的意思就是,我想在name相同的情况下,合并任意时间间隔并使num相加./////////////////////////////////////////////////////////////////////提别注意. dateT < x <= dateT
意思是:如果有3行
aaa 2011-05-01 05:00 20
aaa 2011-05-01 05:05 21
aaa 2011-05-01 05:10 21
按每10分钟合并就不能把aaa 2011-05-01 05:00 (因为2011-05-01 05:00是属于2011-05-01 04:50~~2011-05-01 05:00这个时间段的)
所以等到如下:
aaa 2011-05-01 05:00 20
aaa 2011-05-01 05:10 42
这里的10分钟合并,并不是指的任意是10分钟.就是指的05:00,05:10,05:20.....05:50(固定的)//////////////////////////////////////////////////////////////////////
例如 每10分钟合并一条记录(结果如下)
name dateT num
aaa 2011-05-01 05:00 20
aaa 2011-05-01 05:10 42
aaa 2011-05-01 05 20 45
aaa 2011-05-01 05:30 49
aaa 2011-05-01 05:40 53
aaa 2011-05-01 05:50 57
aaa 2011-05-01 06:00 62
bbb 2011-05-01 05:10 65
bbb 2011-05-01 05:20 69
bbb 2011-05-01 05:30 73
bbb 2011-05-01 05:35 38例如 每30分钟... 略请大哥们写个源码赐教一下...跪求
/* 参数
* list ---- 待合并数组
* mins ---- 待合并分钟数
* 返回
* 合并后数组
*/
public static List<ClassBean> combine(List<ClassBean> list, int mins) {
List<ClassBean> newlist = new ArrayList<ClassBean>();
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
ClassBean cb,lastcb;
long gap = mins * 60 * 1000, gapid=-1;
for (int i = 0; i < list.size(); i++) {
cb = list.get(i);
if (newlist.size() == 0) {
gapid = (df.parse(cb.getDateT()).getTime()-1)/gap;
cb.setDateT(df.format(new Date((gapid+1)*gap)));
newlist.add(cb);
} else {
lastcb = newlist.get(newlist.size()-1);
if (lastcb.getName().equals(cb.getName()) && (df.parse(cb.getDateT()).getTime()-1)/gap == gapid) {
lastcb.setNum(lastcb.getNum() + cb.getNum());
} else {
gapid = (df.parse(cb.getDateT()).getTime()-1)/gap;
cb.setDateT(df.format(new Date((gapid+1)*gap)));
newlist.add(cb);
}
}
}
} catch (Exception e) { System.out.println(e); }
return newlist;
}
如果需要非排序版,循环的逻辑反而好控制了,不要要多写一个类
如果是oracle的话
case when可以秒杀
其他数据库不清楚
for exampleimport java.util.*;
import java.text.*;
public class SC {
public static void main(String[] args) {
List<ClassBean> list = new ArrayList<ClassBean>();
list.add(new ClassBean("aaa", "2011-05-01 05:00", 20));
list.add(new ClassBean("aaa", "2011-05-01 05:05", 21));
list.add(new ClassBean("aaa", "2011-05-01 05:10", 21));
list.add(new ClassBean("aaa", "2011-05-01 05:15", 22));
list.add(new ClassBean("aaa", "2011-05-01 05:20", 23));
list.add(new ClassBean("aaa", "2011-05-01 05:25", 24));
list.add(new ClassBean("aaa", "2011-05-01 05:30", 25));
list.add(new ClassBean("aaa", "2011-05-01 05:35", 26));
list.add(new ClassBean("aaa", "2011-05-01 05:40", 27));
list.add(new ClassBean("aaa", "2011-05-01 05:45", 28));
list.add(new ClassBean("aaa", "2011-05-01 05:50", 29));
list.add(new ClassBean("aaa", "2011-05-01 05:55", 30));
list.add(new ClassBean("aaa", "2011-05-01 06:00", 31)); list.add(new ClassBean("bbb", "2011-05-01 05:05", 32));
list.add(new ClassBean("bbb", "2011-05-01 05:10", 33));
list.add(new ClassBean("bbb", "2011-05-01 05:15", 34));
list.add(new ClassBean("bbb", "2011-05-01 05:20", 35));
list.add(new ClassBean("bbb", "2011-05-01 05:25", 36));
list.add(new ClassBean("bbb", "2011-05-01 05:30", 37));
list.add(new ClassBean("bbb", "2011-05-01 05:35", 38)); //这里假设list已经是按name和dataT排好序,如果不是,可以在这里先排序 System.out.println("----------union 5----------");
List<ClassBean> result = union(list, 5);
for (ClassBean cb : result) {
System.out.println(cb);
} System.out.println("----------union 10----------");
result = union(list, 10);
for (ClassBean cb : result) {
System.out.println(cb);
} System.out.println("----------union 30----------");
result = union(list, 30);
for (ClassBean cb : result) {
System.out.println(cb);
}
} public static List<ClassBean> union(List<ClassBean> list, int minute) {
List<ClassBean> result = new ArrayList<ClassBean>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Calendar calendar = Calendar.getInstance();
ClassBean cb, lastcb = list.get(0);
int num = 0;
for (int i = 0; i < list.size(); i++) {
cb = list.get(i);
if (i == 0 || ! lastcb.getName().equals(cb.getName())) {
if (i != 0) {
result.add(new ClassBean(lastcb.getName(), sdf.format(calendar.getTime()), num));
}
lastcb = cb;
calendar.setTime(sdf.parse(cb.getDataT()));
int mm = calendar.get(Calendar.MINUTE);
calendar.set(Calendar.MINUTE, minute);
if (mm == 0) {
result.add(cb);
continue;
}
num = 0;
}
if (sdf.parse(cb.getDataT()).after(calendar.getTime())) {
result.add(new ClassBean(cb.getName(), sdf.format(calendar.getTime()), num));
calendar.add(Calendar.MINUTE, minute);
num = cb.getNum();
} else {
num += cb.getNum();
}
if (i == list.size()-1) { //最后一条不知道LZ是对时间上是什么要求
//result.add(new ClassBean(cb.getName(), sdf.format(calendar.getTime()), num));
result.add(new ClassBean(cb.getName(), cb.getDataT(), num));
}
}
} catch (Exception e) { System.out.println(e); }
return result;
}
}class ClassBean {
String name;
String dataT;
int num; public ClassBean(String name, String dataT, int num) {
this.name = name;
this.dataT = dataT;
this.num = num;
} public String getName() {return this.name;}
public String getDataT() {return this.dataT;}
public int getNum() {return this.num;} public String toString() {
return String.format("%s\t%s\t%d", name, dataT, num);
}
}
import java.text.*;
public class SC {
public static void main(String[] args) {
List<ClassBean> list = new ArrayList<ClassBean>();
// list.add(new ClassBean("aaa", "2011-05-01 05:00", 20));
// list.add(new ClassBean("aaa", "2011-05-01 05:05", 21));
list.add(new ClassBean("aaa", "2011-05-01 05:11", 21));
list.add(new ClassBean("aaa", "2011-05-01 05:15", 22));
list.add(new ClassBean("aaa", "2011-05-01 05:20", 23));
list.add(new ClassBean("aaa", "2011-05-01 05:25", 24));
list.add(new ClassBean("aaa", "2011-05-01 05:30", 25));
list.add(new ClassBean("aaa", "2011-05-01 05:35", 26));
list.add(new ClassBean("aaa", "2011-05-01 05:40", 27));
list.add(new ClassBean("aaa", "2011-05-01 05:45", 28));
list.add(new ClassBean("aaa", "2011-05-01 05:50", 29));
list.add(new ClassBean("aaa", "2011-05-01 05:55", 30));
list.add(new ClassBean("aaa", "2011-05-01 06:00", 31)); list.add(new ClassBean("bbb", "2011-05-01 05:05", 32));
list.add(new ClassBean("bbb", "2011-05-01 05:10", 33));
list.add(new ClassBean("bbb", "2011-05-01 05:15", 34));
list.add(new ClassBean("bbb", "2011-05-01 05:20", 35));
list.add(new ClassBean("bbb", "2011-05-01 05:25", 36));
list.add(new ClassBean("bbb", "2011-05-01 05:30", 37));
list.add(new ClassBean("bbb", "2011-05-01 05:35", 38)); System.out.println("----------union 5----------");
List<ClassBean> result = union(list, 5);
for (ClassBean cb : result) {
System.out.println(cb);
} System.out.println("----------union 10----------");
result = union(list, 10);
for (ClassBean cb : result) {
System.out.println(cb);
} System.out.println("----------union 30----------");
result = union(list, 30);
for (ClassBean cb : result) {
System.out.println(cb);
}
} public static List<ClassBean> union(List<ClassBean> list, int minute) {
List<ClassBean> result = new ArrayList<ClassBean>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Calendar calendar = Calendar.getInstance();
ClassBean cb, lastcb = list.get(0);
int num = 0;
for (int i = 0; i < list.size(); i++) {
cb = list.get(i);
if (i == 0 || ! lastcb.getName().equals(cb.getName())) {
if (i != 0) {
result.add(new ClassBean(lastcb.getName(), sdf.format(calendar.getTime()), num));
}
lastcb = cb;
calendar.setTime(sdf.parse(cb.getDateT()));
int mm = calendar.get(Calendar.MINUTE);
calendar.set(Calendar.MINUTE, minute);
if (mm == 0) {
result.add(cb);
continue;
} else if (mm > minute) {
int tmp = minute;
while (tmp < mm) {tmp += minute;}
calendar.set(Calendar.MINUTE, tmp);
}
num = 0;
}
if (sdf.parse(cb.getDateT()).after(calendar.getTime())) {
result.add(new ClassBean(cb.getName(), sdf.format(calendar.getTime()), num));
calendar.add(Calendar.MINUTE, minute);
num = cb.getNum();
} else {
num += cb.getNum();
}
if (i == list.size()-1) { //最后一条不知道LZ是对时间上是什么要求
//result.add(new ClassBean(cb.getName(), sdf.format(calendar.getTime()), num));
result.add(new ClassBean(cb.getName(), cb.getDateT(), num));
}
}
} catch (Exception e) { System.out.println(e); }
return result;
}
}class ClassBean {
String name;
String dateT;
int num; public ClassBean(String name, String dateT, int num) {
this.name = name;
this.dateT = dateT;
this.num = num;
} public String getName() {return this.name;}
public String getDateT() {return this.dateT;}
public int getNum() {return this.num;} public void setName(String name) {this.name = name;}
public void setDateT(String dateT) {this.dateT = dateT;}
public void setNum(int num) {this.num = num;} public String toString() {
return String.format("%s\t%s\t%d", name, dateT, num);
}
}
import java.util.*;
import java.text.*;
public class SC {
public static void main(String[] args) {
List<ClassBean> list = new ArrayList<ClassBean>();
list.add(new ClassBean("aaa", "2011-05-01 05:00", 20));
list.add(new ClassBean("aaa", "2011-05-01 05:05", 21));
list.add(new ClassBean("aaa", "2011-05-01 05:11", 21));
list.add(new ClassBean("aaa", "2011-05-01 05:15", 22));
list.add(new ClassBean("aaa", "2011-05-01 05:20", 23));
list.add(new ClassBean("aaa", "2011-05-01 05:25", 24));
list.add(new ClassBean("aaa", "2011-05-01 05:30", 25));
list.add(new ClassBean("aaa", "2011-05-01 05:35", 26));
list.add(new ClassBean("aaa", "2011-05-01 05:40", 27));
list.add(new ClassBean("aaa", "2011-05-01 05:45", 28));
list.add(new ClassBean("aaa", "2011-05-01 05:50", 29));
list.add(new ClassBean("aaa", "2011-05-01 05:55", 30));
list.add(new ClassBean("aaa", "2011-05-01 06:00", 31)); list.add(new ClassBean("bbb", "2011-05-01 05:05", 32));
list.add(new ClassBean("bbb", "2011-05-01 05:10", 33));
list.add(new ClassBean("bbb", "2011-05-01 05:15", 34));
list.add(new ClassBean("bbb", "2011-05-01 05:20", 35));
list.add(new ClassBean("bbb", "2011-05-01 05:25", 36));
list.add(new ClassBean("bbb", "2011-05-01 05:30", 37));
list.add(new ClassBean("bbb", "2011-05-01 05:35", 38)); System.out.println("----------union 5----------");
List<ClassBean> result = union(list, 5);
for (ClassBean cb : result) {
System.out.println(cb);
} System.out.println("----------union 10----------");
result = union(list, 10);
for (ClassBean cb : result) {
System.out.println(cb);
} System.out.println("----------union 30----------");
result = union(list, 30);
for (ClassBean cb : result) {
System.out.println(cb);
}
} public static List<ClassBean> union(List<ClassBean> list, int minute) {
List<ClassBean> result = new ArrayList<ClassBean>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Calendar calendar = Calendar.getInstance();
ClassBean cb, lastcb = list.get(0);
int num = 0;
for (int i = 0; i < list.size(); i++) {
cb = list.get(i);
if (i == 0 || ! lastcb.getName().equals(cb.getName())) {
if (i != 0) {
result.add(new ClassBean(lastcb.getName(), sdf.format(calendar.getTime()), num));
}
lastcb = cb;
calendar.setTime(sdf.parse(cb.getDateT()));
int mm = calendar.get(Calendar.MINUTE);
calendar.set(Calendar.MINUTE, minute);
if (mm == 0) {
result.add(cb);
continue;
} else if (mm > minute) { //第一次修正了这里
int tmp = minute;
while (tmp < mm) {tmp += minute;}
calendar.set(Calendar.MINUTE, tmp);
}
num = 0;
}
if (sdf.parse(cb.getDateT()).after(calendar.getTime())) {
result.add(new ClassBean(cb.getName(), sdf.format(calendar.getTime()), num));
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(cb.getDateT()));
int mm = c.get(Calendar.MINUTE);
int tmp = calendar.get(Calendar.MINUTE);
while (tmp < mm) {tmp += minute;}
calendar.set(Calendar.MINUTE, tmp); //第二次修正了这里
num = cb.getNum();
} else {
num += cb.getNum();
}
if (i == list.size()-1) { //最后一条不知道LZ是对时间上是什么要求
//result.add(new ClassBean(cb.getName(), sdf.format(calendar.getTime()), num));
result.add(new ClassBean(cb.getName(), cb.getDateT(), num));
}
}
} catch (Exception e) { System.out.println(e); }
return result;
}
}class ClassBean {
String name;
String dateT;
int num; public ClassBean(String name, String dateT, int num) {
this.name = name;
this.dateT = dateT;
this.num = num;
} public String getName() {return this.name;}
public String getDateT() {return this.dateT;}
public int getNum() {return this.num;} public void setName(String name) {this.name = name;}
public void setDateT(String dateT) {this.dateT = dateT;}
public void setNum(int num) {this.num = num;} public String toString() {
return String.format("%s\t%s\t%d", name, dateT, num);
}
}