Bootstrap

多个list集合使用stream分组进行重组数据

多个list集合使用stream分组进行重组数据

@Override
        public static void main(String[] args) {
	        List<Map<String,Object>> list1 = new ArrayList<>();
	        HashMap<String, Object> map11 = new HashMap<>();
	        map11.put("age",18);
	        map11.put("name","张三");
	        map11.put("sex","男");
	        HashMap<String, Object> map12 = new HashMap<>();
	        map12.put("age",19);
	        map12.put("name","李四");
	        map12.put("sex","男");
	        list1.add(map11);
	        list1.add(map12);
	
	        List<Map<String,Object>> list2 = new ArrayList<>();
	        HashMap<String, Object> map21 = new HashMap<>();
	        map21.put("name","张三");
	        map21.put("height",178);
	        HashMap<String, Object> map22 = new HashMap<>();
	        map22.put("name","李四");
	        map22.put("height",170);
	        list2.add(map21);
	        list2.add(map22);
	
	        List<Map<String,Object>> list3 = new ArrayList<>();
	        HashMap<String, Object> map31 = new HashMap<>();
	        map31.put("name","张三");
	        map31.put("money",100);
	        HashMap<String, Object> map32 = new HashMap<>();
	        map32.put("name","李四");
	        map32.put("money",150);
	        list3.add(map31);
	        list3.add(map32);
			// list1 = [{sex=男, name=张三, age=18}, {sex=男, name=李四, age=19}]
			// list2 = [{name=张三, height=178}, {name=李四, height=170}]
			// list3 = [{money=100, name=张三}, {money=150, name=李四}]
	        // 最终结果list
	        List<Map<String,Object>> resList = new ArrayList<>();
	        // 临时list
	        List<Map<String,Object>> resListTemp = new ArrayList<>();
	        resListTemp.addAll(list1);
	        resListTemp.addAll(list2);
	        resListTemp.addAll(list3);
	
	        // 当前map key为名字,值为根据名字分组后的结果集(多少个名字就有多少个集合)
	        Map<Object, List<Map<String, Object>>> name = resListTemp.stream().collect(Collectors.groupingBy(m -> m.get("name")));
	
	        List<List<Map<String, Object>>> values = new ArrayList<>(name.values());
	
	        for (List<Map<String, Object>> value : values) {
	            Map<String, Object> hashMap = new HashMap<>();
	            for (Map<String, Object> map : value) {
	                hashMap.put("name",map.get("name"));
	                if (null != map.get("age")){
	                    hashMap.put("age",map.get("age"));
	                }
	                if (null != map.get("sex")){
	                    hashMap.put("sex",map.get("sex"));
	                }
	                if (null != map.get("height")){
	                    hashMap.put("height",map.get("height"));
	                }
	                if (null != map.get("money")){
	                    hashMap.put("money",map.get("money"));
	                }
	            }
	            resList.add(hashMap);
	        }
			// resList = [{money=150, sex=男, name=李四, age=19, height=170}, {money=100, sex=男, name=张三, age=18, height=178}]
	    }

       

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;