`
53873039oycg
  • 浏览: 823746 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多
有时候不得不对数据手动排序分组,下面是一个简单的例子。

      

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
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics