利用JAVA 8的特性實現List數據轉Map數據並進行分組排序。
1、准備數據
List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> m1 = new HashMap<>(); m1.put("a", 1); m1.put("c", 3); Map<String, Object> m2 = new HashMap<>(); m2.put("a", 11); m2.put("b", 2); Map<String, Object> m3 = new HashMap<>(); m3.put("a", 111); m3.put("c", 1); Map<String, Object> m4 = new HashMap<>(); m4.put("b", 22); Map<String, Object> m5 = new HashMap<>(); m5.put("a", 1111); m5.put("b", 222); list.add(m1); list.add(m2); list.add(m3); list.add(m4); list.add(m5); System.out.println("未分組排序數據:" + list); System.out.println("已分組排序數據:" + transition(list));
2、編寫分組排序方法
public static Map<String, List<Map<String, Object>>> transition(List<Map<String, Object>> list){ Map<String, List<Map<String, Object>>> map = new HashMap<>(); // 分組 for(Map<String, Object> temp : list) { // 獲取Map的每一對值 Iterator<Map.Entry<String, Object>> iterator = temp.entrySet().iterator(); while (iterator.hasNext()) { List<Map<String, Object>> listAndMap = new ArrayList<>(); // 獲取到每一個實體 Map.Entry<String, Object> entity = iterator.next(); if (map.containsKey(entity.getKey())) { // 獲取原來存在的數據 List<Map<String, Object>> lm = map.get(entity.getKey()); lm.add(new HashMap<String, Object>() {{ put(entity.getKey(), entity.getValue()); }}); Collections.sort(lm, (param1, param2) -> (param2.get(entity.getKey()).toString().compareTo(param1.get(entity.getKey()).toString())) ); map.replace(entity.getKey(), lm); } else { listAndMap.add(new HashMap<String, Object>() {{ put(entity.getKey(), entity.getValue()); }}); map.put(entity.getKey(), listAndMap); } } } return map; }
3、測試
System.out.println("未分組排序數據:" + list);
System.out.println("已分組排序數據:" + transition(list));
4、輸出結果
未排序數據:[{a=1, c=3}, {a=11, b=2}, {a=111, c=1}, {b=22}, {a=1111, b=222}]
已排序數據:{a=[{a=1111}, {a=111}, {a=11}, {a=1}], b=[{b=222}, {b=22}, {b=2}], c=[{c=3}, {c=1}]}
* 本人小白,希望可以幫助到跟我一樣的小白,希望大神多多指導。