该数组中的数据为时间和号码,即:
recordTime                          telphone
2011-03-17  09:00:00                13902261985
2011-03-17  09:00:00                13902265418
    .                                    .
    .                                    .
    .                                    .  
2011-03-17  11:00:00                13584152984   要求是前列相同的recordTime,累计后列 去重后 的telphone
即显示结果为:
recordTime                              num
2011-03-17  09:00:00                     4
    .                                    .
    .                                    .
    .                                    .  
2011-03-17  11:00:00                     5
      
开始我是用Map集合去累计,但是key值是唯一的,后面相同的就会覆盖前面的数据,纠结了
以下是本人的代码
                         for (TsNumStat newmeta : list) {
System.out.println("取得的时间是:" + newmeta.getRecordTime());
Map<String, String> TsNumMap = new HashMap<String, String>();
if (!ToolKit.isNullOrBlank(newmeta.getTelphone1())) {
TsNumMap.put(newmeta.getQuiresTime(), newmeta.getTelphone());
Iterator iter = (Iterator) TsNumMap.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = TsNumMap.get(key);
System.out.println("key:" + key);
System.out.println("value:" + val);
} } }     
     

解决方案 »

  1.   

    应该用这种map结构:HashMap<String, Set>
      

  2.   

    3楼的方法也可以。MAP不是只能存放<String,String>类型的~ 而SET可以帮你去除重复值。
      

  3.   


    这个是可以   不过在这里不合理啊 TsNumStat类已经包含在里面了,重新建个类,代码也冗余,
    后期维护起来也烦
    主要的还是我这只是一个小功能 查询出的结果是要和别的数据一起输出的 
      

  4.   

    以recordTime 为HashMap<String, Set>的keyvalue 是 一个set集合 每次先判断是否key值 是否存在 存在的话 得到这个set集合后把telphone 添加进去不存在 新建一个set 把telphone 添加进去
      

  5.   


    有点懂了 你的意思是set集合里是放telphone的
    如果recordTime存在的话,则往map里添加,那累计数就是set的size了
    但是如何判断recordTime的时间段了,这里是要累计每个时间的手机号码数量啊
    能贴上代码 最好了 
      

  6.   


    package com.redprairie.sal.tools;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;class Tel {
    private String recordTime;
    private String telPhone;
    private int count = 1;

    public int getCount() {
    return count;
    } public void setCount(int count) {
    this.count = count;
    } public Tel(String recordTime, String telPhone) {
    this.recordTime = recordTime;
    this.telPhone = telPhone;
    }

    public String getRecordTime() {
    return recordTime;
    }
    public void setRecordTime(String recordTime) {
    this.recordTime = recordTime;
    }
    public String getTelPhone() {
    return telPhone;
    }
    public void setTelPhone(String telPhone) {
    this.telPhone = telPhone;
    }

    }
    public class Test { @SuppressWarnings("unchecked")
    public static void main(String[] args) throws Exception {
    List list = new ArrayList();
    Tel tel1 = new Tel("2011-03-17 09:00:00", "13902261985");
    Tel tel2 = new Tel("2011-03-17 09:00:00", "13902261985");
    Tel tel3 = new Tel("2011-03-17 11:00:00", "13902261985");
    list.add(tel1);
    list.add(tel2);
    list.add(tel3);

    Map map = new HashMap();

    Iterator iter = list.iterator();
    while(iter.hasNext()) {
    Tel tel = (Tel)iter.next();
    if(map.containsKey(tel.getRecordTime())) {
    tel.setCount(tel.getCount()+1);
    }
    map.put(tel.getRecordTime(), tel);
    }

    Iterator it = map.keySet().iterator();
    while(it.hasNext()) {
    String key = (String) it.next();
    Tel tel = (Tel) map.get(key);
    System.out.println(tel.getCount());
    }

    }
    }
      

  7.   

    贴下我自己写的代码这是往map里存数据
    for (TsNumStat newmeta : list) {

    Set set = new HashSet();
    if(newmeta.getTelphone1() != null) {
    set.add(newmeta.getTelphone1());
    }
    if(newmeta.getTelphone2() != null) {
    set.add(newmeta.getTelphone2());
    }
    Map<String, Set> map = new HashMap<String, Set>();
    map.put(newmeta.getQuiresTime(), set);


    // System.out.println("取得的时间是:" + newmeta.getRecordTime());
    if (!ToolKit.isNullOrBlank(newmeta.getTelphone1()) || !ToolKit.isNullOrBlank(newmeta.getTelphone2())) {
    Iterator iter = (Iterator) map.keySet().iterator();
    while (iter.hasNext()) {
    Object key = iter.next();
    Object val = map.get(key);
    System.out.println("key:" + key);
    System.out.println("value:" + val);
    }
    //
    } }这是map里的数据key:2011-03-17  11:00:00
    value:[15220348600]
    key:2011-03-17  11:00:00
    value:[13928559591, 15820682131]
    key:2011-03-17  11:00:00
    value:[15220348600]
    key:2011-03-17  11:00:00
    value:[13712836891]
    key:2011-03-17  12:00:00
    value:[13600419591]
    key:2011-03-17  12:00:00
    value:[15015137600]
    key:2011-03-17  12:00:00
    value:[13600419591]
    key:2011-03-17  12:00:00
    value:[13538477164]
    key:2011-03-17  14:00:00
    value:[13592760396]
    key:2011-03-17  14:00:00
    value:[13592760396]
    key:2011-03-17  14:00:00
    value:[15820682131]有的key值里是有2个号码的 现在我是卡在相同的时间累积不重复的号码数量并且输出我的想法是:新建个map,取相同的时间为第一列,然后往value里写set,用set本身的
    特性自动去重,这样set.size()就是号码数量。那么输出的结果就该类似于这样
    key:2011-03-17  11:00:00
    value:4
    key:2011-03-17  12:00:00
    value:4
    key:2011-03-17  14:00:00
    value:3
    我现在就卡在累计号码数量这了
      

  8.   


    大哥 小弟我才刚工作啊 这集合以前都没怎么写过我把纠结的地方解释下吧号码时从数据的一个字段里提取出来的,每个时间对应的号码有1个或者2个
    从数据字段里提取出来的时间、号码1、号码2的字段分别是recordtime,phone1,phone2并不是一个字符串啊按照你的代码写的 运行的结果没去重啊 
      

  9.   

    使用 map 累加。map不支持有重复的key
      

  10.   

    用Map吧, 这个不是当键出现重复的时候会出现覆盖吗?用其他的应该也可以,只是耗费的时间比较长而已。
      

  11.   

    索引用Map,去重复用Set,That's all .
      

  12.   

    使用HashMap<String, Integer>
    判断时:如果map含有一个key(timestamp),就将这个key对应的值取出来,然后加+1;否则将一个<key,1>值放到这个map中
    soso....
      

  13.   

    很感谢楼上这么多兄弟的帮忙哈问题已经解决了 我是把Map<String, Set> map = new HashMap<String, Set>();
    这个给放到循环里去了,结果导致每次循环都是一个新的map找到问题的根源很纠结  不过也算是解决了