本帖最后由 m582445672 于 2011-07-07 12:15:18 编辑

解决方案 »

  1.   

    如果我没有理解错的话,这次的需求跟上次的区别就在于:
    上次是要求dateT < x <= dateT
    这次是要求05:00 <= time < 05:10对吗?
      

  2.   

    在上次的基础上修改了一下,修改处都注释出来了
    你可以注意下,修改的地方都跟gapid的计算有关
    主要原理就是取从1970年至今的毫秒数getTime(),除以时间间隔的毫秒数mins * 60 * 1000,得到gapid
    gapid相同的记录合并,由于上次跟这次的需求稍有差别,所以gapid也跟着稍作调整就行了
    /*  参数
     *     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;
    gapid = (df.parse(cb.getDateT()).getTime())/gap;
    //cb.setDateT(df.format(new Date((gapid+1)*gap)));
    cb.setDateT(df.format(new Date(gapid*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) {
    if (lastcb.getName().equals(cb.getName()) && (df.parse(cb.getDateT()).getTime())/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)));
    gapid = (df.parse(cb.getDateT()).getTime())/gap;
    cb.setDateT(df.format(new Date(gapid*gap)));
    newlist.add(cb);
    }
    }
    }
    } catch (Exception e) { System.out.println(e); }
    return newlist;
    }