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