搞糊涂了,List Map 的问题,求大神直接上代码什么的,需求内详

cyl713 2012-11-14 04:51:28
一个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?在线等
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-11-14
  • 打赏
  • 举报
回复
引用 4 楼 cyl713 的回复:
撤销,结贴,碎了
这是为啥?3楼给的建议无效么?
cyl713 2012-11-14
  • 打赏
  • 举报
回复
撤销,结贴,碎了
MiceRice 2012-11-14
  • 打赏
  • 举报
回复
我看了你的代码后,对你的程序逻辑表示感慨。。。 你每次都会先用这段代码: 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);
            }
        }
cyl713 2012-11-14
  • 打赏
  • 举报
回复
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的数据,我吓尿了
MiceRice 2012-11-14
  • 打赏
  • 举报
回复
没看出来难度啊。。。 Map结构就是:Map<String时间戳, List<String值>> 逐个List循环其所有元素: 然后取出其时间戳,在Map中找找有没有:没有就增加一个空的List进去; 然后把value取出来(这就是那个 List),并add当前元素的值。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧