java中對list集合中的數據按照某一個屬性進行分組


import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
 
public class ListSort {  
 
    /**
     * 按照List<Map<String,Object>>里面map的某個value重新封裝成多個不同的list, 原始數據類型List<Map
     * <String,Object>>, 轉換后數據類型Map<String,List<Map<String,Object>>>
     * 
     * @param list
     * @param oneMapKey
     * @return
     */
    private static Map<String, Object> change(List<Map<String, Object>> list, String oneMapKey) {
        Map<String, Object> resultMap = new HashMap<String, Object>();
        Set<Object> setTmp = new HashSet<Object>();
        for (Map<String, Object> tmp : list) {
            setTmp.add(tmp.get(oneMapKey));
        }
        Iterator<Object> it = setTmp.iterator();
        while (it.hasNext()) {
            String oneSetTmpStr = (String) it.next();
            List<Map<String, Object>> oneSetTmpList = new ArrayList<Map<String, Object>>();
            for (Map<String, Object> tmp : list) {
                String oneMapValueStr = (String) tmp.get(oneMapKey);
                if (oneMapValueStr.equals(oneSetTmpStr)) {
                    oneSetTmpList.add(tmp);
                }
            }
            resultMap.put(oneSetTmpStr, oneSetTmpList);
        }
        return resultMap;
    }
 
    /**
     * 按照List<Map<String,Object>>里面map的某個value重新封裝成多個不同的list, 原始數據類型List<Map
     * <String,Object>>, 轉換后數據類型Map<String,List<Map<String,Object>>>
     * 
     * @param list
     * @param oneMapKey
     * @return
     */
    private static List<Map<String, Object>> change2(List<Map<String, Object>> inList, String oneMapKey,
            List<Map<String, Object>> outList) {
        // 1.將某個key的值存在set中
        Set<Object> setTmp = new HashSet<Object>();
        for (Map<String, Object> tmp : inList) {
            setTmp.add(tmp.get(oneMapKey));
        }
        // 2.遍歷set
        Iterator<Object> it = setTmp.iterator();
        while (it.hasNext()) {
            String oneMapValueStr = "";
            String oneSetTmpStr = (String) it.next();
            Map<String, Object> oneSetTmpMap = new HashMap<String, Object>();
            List<Map<String, Object>> oneSetTmpList = new ArrayList<Map<String, Object>>();
 
            for (Map<String, Object> tmp : inList) {
                oneMapValueStr = (String) tmp.get(oneMapKey);
                if (oneSetTmpStr.equals(oneMapValueStr)) {
                    oneSetTmpMap.put("text", oneSetTmpStr);
                    oneSetTmpList.add(tmp);
                }
            }
            oneSetTmpMap.put("array", oneSetTmpList);
            outList.add(oneSetTmpMap);
        }
        return outList;
    }
 
 public static void main(String[] args) {
        Map<String, Object> map1 = new HashMap<String, Object>();
        Map<String, Object> map2 = new HashMap<String, Object>();
        Map<String, Object> map3 = new HashMap<String, Object>();
        Map<String, Object> map4 = new HashMap<String, Object>();
 
        List<Map<String, Object>> inList = new ArrayList<Map<String, Object>>();
        map1.put("id", "111");
        map1.put("name", "tom");
        map1.put("sex", "male");
 
        map2.put("id", "222");
        map2.put("name", "jack");
        map2.put("sex", "male");
 
        map3.put("id", "333");
        map3.put("name", "lucy");
        map3.put("sex", "female");
 
        map4.put("id", "444");
        map4.put("name", "lucy");
        map4.put("sex", "female");
 
        inList.add(map1);
        inList.add(map2);
        inList.add(map3);
        inList.add(map4);
        System.out.println("原始inList:" + inList);
 
        Map<String, Object> resultMap = new HashMap<String, Object>();
        // resultMap = change(list, "sex");
        resultMap = change(inList, "name");
        System.out.println("按照map中的某個值重新封裝后的resultMap:" + resultMap);
 
        List<Map<String, Object>> outList = new ArrayList<Map<String, Object>>();
        System.out.println("retList==1==:" + outList);
        outList = change2(inList, "name", outList);
        System.out.println("retList==2==:" + outList);
 
    }
}
————————————————
版權聲明:本文為CSDN博主「FOCUS_ON_AI」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_32649581/article/details/82851701

 

//根據設備名稱進行分組
            Map<String, List<ModuleStatisticDetail>> collect = moduleStatisticDetails.stream()
                    .collect(Collectors.groupingBy(ModuleStatisticDetail::getDeviceTypeName));

 

/**
         * 使用jdk1.8 lamada表達式排序 倒序排列
         */
        list=list.stream().sorted(Comparator.comparing(SortBean::getT1).reversed()).collect(Collectors.toList());
        for (SortBean sortBean : list) {
            System.out.println(sortBean);
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM