当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

[代码片段]List按时间分组,按时间科目降序排列

发表于: 2015-01-17   作者:53873039oycg   来源:转载   浏览:
摘要: 有时候不得不对数据手动排序分组,下面是一个简单的例子。        public void testSortListMap(){ List<Map<String, String>> retList = new ArrayList<Map<String, String>>();
有时候不得不对数据手动排序分组,下面是一个简单的例子。

      

public void testSortListMap(){
		List<Map<String, String>> retList = new ArrayList<Map<String, String>>();
		Map<String, String> map2 = new HashMap<String, String>();
		map2.put("createdate", "2014-10-01 03:00:00");
		map2.put("course", "数学");
		map2.put("avg", "80");
		retList.add(map2);

		Map<String, String> map3 = new HashMap<String, String>();
		map3.put("createdate", "2014-10-01 03:00:01");
		map3.put("course", "数学");
		map3.put("avg", "80");
		retList.add(map3);

		Map<String, String> map4 = new HashMap<String, String>();
		map4.put("createdate", "2014-09-01 03:00:00");
		map4.put("course", "数学");
		map4.put("avg", "89");
		retList.add(map4);

		Map<String, String> map5 = new HashMap<String, String>();
		map5.put("createdate", "2014-10-01 03:00:00");
		map5.put("course", "语文");
		map5.put("avg", "82");
		retList.add(map5);

		Map<String, String> map6 = new HashMap<String, String>();
		map6.put("createdate", "2014-10-01 03:00:00");
		map6.put("course", "英语");
		map6.put("avg", "83");
		retList.add(map6);

		Map<String, String> map7 = new HashMap<String, String>();
		map7.put("createdate", "2014-10-01 03:00:01");
		map7.put("course", "语文");
		map7.put("avg", "83");
		retList.add(map7);

		Map<String, String> map8 = new HashMap<String, String>();
		map8.put("createdate", "2014-09-01 03:00:00");
		map8.put("course", "语文");
		map8.put("avg", "87");
		retList.add(map8);

		Map<String, String> map9 = new HashMap<String, String>();
		map9.put("createdate", "2014-10-01 03:00:01");
		map9.put("course", "english");
		map9.put("avg", "63");
		retList.add(map9);

		Map<String, String> map10 = new HashMap<String, String>();
		map10.put("createdate", "2014-09-01 03:00:00");
		map10.put("course", "english");
		map10.put("avg", "77");
		retList.add(map10);
		
		Map<String, String> map14 = new HashMap<String, String>();
		map14.put("createdate", "");
		map14.put("course", "A2");
		map14.put("avg", "75");
		retList.add(map14);
		
		Map<String, String> map11 = new HashMap<String, String>();
		map11.put("createdate", "2014-09-01 04:00:00");
		map11.put("course", "A2");
		map11.put("avg", "77");
		retList.add(map11);

		Map<String, String> map12 = new HashMap<String, String>();
		map12.put("createdate", "2014-09-01 04:00:01");
		map12.put("course", "A2");
		map12.put("avg", "75");
		retList.add(map12);

		Map<String, String> map13 = new HashMap<String, String>();
		map13.put("createdate", "2014-09-01");
		map13.put("course", "A2");
		map13.put("avg", "75");
		retList.add(map13);
		
		Map<String, String> map15 = new HashMap<String, String>();
		map15.put("createdate", " ");
		map15.put("course", " ");
		map15.put("avg", "75");
		retList.add(map15);
		sortMap(retList);
	}
	
	public void sortMap(List<Map<String, String>> retList) {
		//按时间分组 时间,科目倒序排列
		for (Map<String, String> map : retList) {
			System.out.println(map.get("createdate") + "-----="
					+ map.get("course"));
		}
		System.out.println("-------------------------------------------------");
		final DateFormat dateTimeDf = new SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss");
		final DateFormat dateDf = new SimpleDateFormat("yyyy-MM-dd");
		Collections.sort(retList, new Comparator<Map<String, String>>() {
			public int compare(Map<String, String> arg0,
					Map<String, String> arg1) {
				String create_0Str = String.valueOf(arg0.get("createdate"));
				String create_1Str = String.valueOf(arg1.get("createdate"));
				Date create_0 = null, create_1 = null;
				try {
					if (!StringUtils.isBlank(create_0Str)) {
						if (create_0Str.indexOf(":") != -1) {
							create_0 = dateTimeDf.parse(create_0Str);
						} else {
							create_0 = dateDf.parse(create_0Str);
						}
					}
					if (!StringUtils.isBlank(create_1Str)) {
						if (create_1Str.indexOf(":") != -1) {
							create_1 = dateTimeDf.parse(create_1Str);
						} else {
							create_1 = dateDf.parse(create_1Str);
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				if (create_0 != null && create_1 != null) {
					if (create_0.after(create_1)) {
						return -1;
					} else if (create_0.before(create_1)) {
						return 1;
					} else {
						String course_0 = String.valueOf(arg0.get("course"));
						String course_1 = String.valueOf(arg1.get("course"));
						return course_0.compareTo(course_1);
					}
				}
				return create_1Str.compareTo(create_0Str);
			}
		});
		System.out.println("--------------------排序后-----------------------------");
		for (Map<String, String> map : retList) {
			System.out.println(map.get("createdate") + "-----="
					+ map.get("course"));
		}
		Iterator<Map<String, String>> it = retList.iterator();
		String lastDate = null;
		int order = 1;
		boolean isStart = true;
		while (it.hasNext()) {
			Map<String, String> tmp = it.next();
			String tmpD = String.valueOf(tmp.get("createdate"));
			if (isStart) {
				lastDate = tmpD;
				isStart = false;
			}
			if (!tmpD.equals(lastDate)) {
				lastDate = tmpD;
				order++;
			}
			tmp.put("order", String.valueOf(order));
		}
		System.out
				.println("-------------- 排序分组后----------------------------------");
		for (Map<String, String> map : retList) {
			System.out.println(map.get("order") + "---" + map.get("createdate")
					+ "-----=" + map.get("course"));
		}
	}

 

    结果为:
   
2014-10-01 03:00:00-----=数学
2014-10-01 03:00:01-----=数学
2014-09-01 03:00:00-----=数学
2014-10-01 03:00:00-----=语文
2014-10-01 03:00:00-----=英语
2014-10-01 03:00:01-----=语文
2014-09-01 03:00:00-----=语文
2014-10-01 03:00:01-----=english
2014-09-01 03:00:00-----=english
-----=A2
2014-09-01 04:00:00-----=A2
2014-09-01 04:00:01-----=A2
2014-09-01-----=A2
 -----= 
-------------------------------------------------
--------------------排序后-----------------------------
2014-10-01 03:00:01-----=english
2014-10-01 03:00:01-----=数学
2014-10-01 03:00:01-----=语文
2014-10-01 03:00:00-----=数学
2014-10-01 03:00:00-----=英语
2014-10-01 03:00:00-----=语文
2014-09-01 04:00:01-----=A2
2014-09-01 04:00:00-----=A2
2014-09-01 03:00:00-----=english
2014-09-01 03:00:00-----=数学
2014-09-01 03:00:00-----=语文
2014-09-01-----=A2
 -----= 
-----=A2
-------------- 排序分组后----------------------------------
1---2014-10-01 03:00:01-----=english
1---2014-10-01 03:00:01-----=数学
1---2014-10-01 03:00:01-----=语文
2---2014-10-01 03:00:00-----=数学
2---2014-10-01 03:00:00-----=英语
2---2014-10-01 03:00:00-----=语文
3---2014-09-01 04:00:01-----=A2
4---2014-09-01 04:00:00-----=A2
5---2014-09-01 03:00:00-----=english
5---2014-09-01 03:00:00-----=数学
5---2014-09-01 03:00:00-----=语文
6---2014-09-01-----=A2
7--- -----= 
8--------=A2
 

[代码片段]List按时间分组,按时间科目降序排列

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
对100名学生姓名成绩按降序排列: 主要问题:名字要随成绩变化,要定义成string; for(j=0;j<99;j+
把一个已知的字符串按照ASCII码的升序排列,处理后的字符串仍然保留在原字符串中。 比如说: 输入字
我现在的问题是有一个大的事实表,已经有数十亿条数据,过来的临时表需要merge进去. 临时表的大小也不
上图(图片是借用别人的,只是为了说明问题),我的问题是出现在elasticsearch,修正后想到数据库是
上图(图片是借用别人的,只是为了说明问题),我的问题是出现在elasticsearch,修正后想到数据库是
select count(*), to_char(t.input_time, 'yyyy-mm-dd') time from news_info t group by to_char(t
开发背景: 某部门数据的积累导致列表打开变慢,大概10秒左右。正常的解决方案为设置列表视图筛选,
看统计结果: 这里利用的是convert函数,这里不得不说一下convert函数 CONVERT() 函数是把日期转换
“同样一个品牌,曝光 1 秒和 5 秒有差别么?” 这是《金融时报》(Financial Times)数字广告总监
做报表时遇到一个问题,根据日期字段查询一年中每月某项的统计数量,搞了有点时间才弄出来,贴出来
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号