一个List里面存放了1个对象,对象有2个字段,时间戳,值这样的List可能有若干个,数据大致如下:
第一个list    ps:值空格后面的是序列号,表示这个是第几个list
1352822400
12916.73 0
1352822700
11624.7 0
1352823000
10872.0 0第二个list
1352822400
12916.73 1
1352822700
11624.7 1
1352823000
10872.0 1
1352823300
10427.49 1我想提取出相同的时间戳作为key,value部分是一个List<String> 里面存放这个时间戳的2个值,如果是3个list,那就应该是3个值。求如何封装这样一个map?在线等

解决方案 »

  1.   

    没看出来难度啊Map结构就是:Map<String时间戳, List<String值>>逐个List循环其所有元素:
        然后取出其时间戳,在Map中找找有没有:没有就增加一个空的List进去;
        然后把value取出来(这就是那个 List),并add当前元素的值。
      

  2.   

    public static String formatCompareJson(
    Map<Integer, List<FluxDetailVo>> comparemap) {
    Set<Integer> keyset = comparemap.keySet();
    Map<Long, List<String>> map = new HashMap<Long, List<String>>();
    for (Iterator it = keyset.iterator(); it.hasNext();) {
    Integer key = (Integer) it.next();
    List<FluxDetailVo> list = comparemap.get(key);
    for (FluxDetailVo fluxDetailVo : list) {
    List<String> valueslist = new ArrayList<String>();
    long timestamp = fluxDetailVo.getTimestamp();
    map.put(timestamp, valueslist);
    } for (FluxDetailVo fluxDetailVo : list) {
    long timestamp = fluxDetailVo.getTimestamp();
    String value = fluxDetailVo.getFluxdata() + " " + key;
    if (map.containsKey(timestamp)) {
    List<String> valuelist = map.get(timestamp);
    valuelist.add(value);
    }
    }
    }
    }大哥,我是这么写的,但遍历出来的数据,list里面只有最后add的数据,我吓尿了
      

  3.   

    我看了你的代码后,对你的程序逻辑表示感慨你每次都会先用这段代码:
    for (FluxDetailVo fluxDetailVo : list) {
                    List<String> valueslist = new ArrayList<String>();
                    long timestamp = fluxDetailVo.getTimestamp();
                    map.put(timestamp, valueslist);
    }
    把你上一次外循环所积累的数据全部给清理掉,实际上就相当于:
    map.put(fluxDetailVo.getTimestamp(), new ArrayList<String>()); //神啊,你每次都new一个新的建议修改的循环结构(片段)如下:        for (Iterator it = keyset.iterator(); it.hasNext();) {
                Integer key = (Integer) it.next();
                List<FluxDetailVo> list = comparemap.get(key);
     
                for (FluxDetailVo fluxDetailVo : list) {
                    long timestamp = fluxDetailVo.getTimestamp();
                    String value = fluxDetailVo.getFluxdata() + " " + key;
                    if (!map.containsKey(timestamp)) {
                        map.put(timestamp, new ArrayList<String>());
                    }
                    List<String> valuelist = map.get(timestamp);
                    valuelist.add(value);
                }
            }