最近总是遇到一些表格数据与数据库查询的要求不一致,即需要查询结果的反转:如下图
原始图:
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()));
}
}