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分钟... 略请大哥们写个源码赐教一下...跪求

解决方案 »

  1.   

    这个还不好写?写个Time Range的判断方法先。
      

  2.   

    身边没工具。要不可以直接用sql写了。
      

  3.   

    问个问题,那个List,是排好序的还是完全混乱的
      

  4.   

    观察LZ给的例子,数组假定已根据name+dateT排序
    /*  参数
     *     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;
    }
    如果需要非排序版,循环的逻辑反而好控制了,不要要多写一个类
      

  5.   

    直接数据库sql级别操作了
    如果是oracle的话
    case when可以秒杀
    其他数据库不清楚
      

  6.   

    用个calendar控制一下就可以了
    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);
        }
    }
      

  7.   

    修正了一下开始时间不对的错误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.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);
        }
    }
      

  8.   

    粗心了,竟然修正了2次
    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);
        }
    }