表格数据反转

最近总是遇到一些表格数据与数据库查询的要求不一致,即需要查询结果的反转:如下图

原始图:

Name

Chinese

Englist

Oracle

Database

Java

96

92

90

89

Design

96

91

88

82

Database

90

91

92

83


需要的格式:

Name

Java

Design

Database

Chinese

96

96

90

Englist

92

91

91

Oracle

90

88

92

Database

89

82

83


由于不想在前台控制页面显示,就在后台拼装了数据,先分享下,如有不足还望指正。

数据是自己构建的虚拟数据


import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;

public class TransformList {
	private static String[] courses = { "chinese", "english", "oracle",	"database" };

	/**
	 * 构建数据,不同班级的成绩平均分(表格标题为:课程)
	 * @author dell
	 * @date 2015-1-6
	 */
	public static List<HashMap<String, String>> creatDatas() {
		List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> map1 = new HashMap<String, String>();
		map1.put("name", "Java");
		map1.put("chinese", "96");
		map1.put("english", "92");
		map1.put("oracle", "90");
		map1.put("database", "89");
		HashMap<String, String> map2 = new HashMap<String, String>();
		map2.put("name", "design");
		map2.put("chinese", "96");
		map2.put("english", "91");
		map2.put("oracle", "88");
		map2.put("database", "82");
		HashMap<String, String> map3 = new HashMap<String, String>();
		map3.put("name", "Law");
		map3.put("chinese", "90");
		map3.put("english", "91");
		map3.put("oracle", "92");
		map3.put("database", "83");
		list.add(map1);
		list.add(map2);
		list.add(map3);
		return list;
	}
	/**
	 * 表格标题为:班级
	 * @author dell
	 * @date 2015-1-7
	 * @param list
	 * @return
	 */
	public static List<HashMap<String, String>> transfrom(List<HashMap<String, String>> list) {
		List<HashMap<String, String>> totalList = new ArrayList<HashMap<String, String>>();
		/**
		 * 存储中间数据即List所需要的HashMap
		 */
		LinkedHashMap<String, HashMap<String, String>> tempData = new LinkedHashMap<String, HashMap<String, String>>();
		HashMap<String, String> context;
		for (HashMap<String, String> hashMap : list) {
			for (String course : courses) {
				/**
				 * 即list中还没有此类型的数据(如Java)就创建新的
				 */
				context = tempData.get(course);
				if (context == null) {
					context = new HashMap<String, String>();
					tempData.put(course, context);
				}
				String className = hashMap.get("name").toString(); 
				String grade = hashMap.get(course).toString();
				context.put(className, grade);
				context.put("name", course);
			}
		}
		totalList.addAll(tempData.values());
		return totalList;
	}

	public static void main(String[] args) {
		System.out.println("原始数据格式:");
		System.out.println(creatDatas());
		System.out.println("处理后:");
		System.out.println(transfrom(creatDatas()));
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值