alexandertech 大哥你好: 
在这个帖子里面,你在7楼的位置回复了关于按时间范围合并的问题
http://topic.csdn.net/u/20110627/17/c7dc82d9-4f18-4f4e-a66b-e779dba88424.html
但是,你的算法是已name+dateT为升序.来求时间范围的
我现在想已dateT+name为升序.来完成这个需求.请问在你的那个算法中, 怎么去修改呢?

解决方案 »

  1.   

     哦。。我明白了谢谢了哈。alexandertech 大哥 顺便进来接个分吧··
      

  2.   

    哈哈
    如果按照dateT+name排序,需要累加的记录在原数组中可能并不相邻,在原算法中修改也可以做到,不过代码失之简洁,可读性变差,维护开销增大。
    我给你写了个入口数组完全混乱版,可以处理任何顺序的输入,程序执行的时间开销和上一个代码仍然是同一个数量级,甚至可读性还提高了,前提是ClassBean中要重写Object的equals()和hashCode()方法
    /*  参数
     *     list ---- 待合并数组
     *     mins ---- 待合并分钟数
     *  返回
     *     合并后数组
     */    
    public static List<ClassBean> combine2(List<ClassBean> list, int mins) {
    List<ClassBean> newlist = new ArrayList<ClassBean>();
    try {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    HashMap<ClassBean, ClassBean> map = new HashMap<ClassBean, ClassBean>();
    long gap = mins * 60 * 1000, gapid;
    for (int i = 0; i < list.size(); i++) {
    ClassBean cb = list.get(i).clone();
    gapid = (df.parse(cb.getDateT()).getTime()-1)/gap;
    cb.setDateT(df.format(new Date((gapid+1)*gap)));
    if (map.containsKey(cb))
    map.get(cb).setNum(map.get(cb).getNum()+cb.getNum());
    else {
    map.put(cb, cb);
    newlist.add(cb);
    }
    }
    } catch (Exception e) { System.out.println(e); }
    return newlist;
    }
    重写equals()和hashCode()的ClassBean.java:public class ClassBean {
      private String name;
      private String dateT;
      private int num;   public String getName() {return name;}
      public void setName(String name) {this.name = name;}
      public String getDateT() {return dateT;}
      public void setDateT(String dateT) {this.dateT = dateT;}
      public int getNum() {return num;}
      public void setNum(int num) {this.num = num;}
      
      public boolean equals(Object cb) {
      if (cb instanceof ClassBean) 
      return ((ClassBean)cb).getName().equals(name) && ((ClassBean)cb).getDateT().equals(dateT);
      return false;
      }
      
      public int hashCode() {
      return name.hashCode() + dateT.hashCode();
      
      }
      
      public ClassBean clone() {
      ClassBean cb = new ClassBean();
      cb.setName(name);
      cb.setDateT(dateT);
      cb.setNum(num);
      return cb;
      }
    }
      

  3.   

    我是从alexandertech(GG?MM?)的空间跑过来的给点零头吧