java中对list集合中的数据按照某一个属性进行分组

摘要:
导入java.util。阵列列表;导入java.util。HashMap;导入java.util。HashSet;导入java.util。迭代器;导入java.util。列表导入java.util。地图导入java.util。设置PublicclassListSort{/***根据List<Map<String
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);
 
    }
}



//根据设备名称进行分组 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); } 复制代码

免责声明:文章转载自《java中对list集合中的数据按照某一个属性进行分组》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux追加文件内容并在内容前加上该文件名(awk, FILENAME功能妙用)Android 实现异步加载图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring MVC + Mongodb

在maven的pom.xml中增加引用: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/...

ASP.NET Core SignalR (七):考虑设计向后兼容的SignalR API

此为系列文章,对MSDN ASP.NET Core SignalR 的官方文档进行系统学习与翻译。其中或许会添加本人对 ASP.NET Core 的浅显理解。 使用自定义参数对象来确保向后兼容         向SignalR 中心 方法添加参数(要么是服务端方法,要么是客户端方法)是一个重大的变化。这就意味着老的 服务端/客户端在不带有预期个数的参数进行...

Switch重构处理

public class Fun{         public void IFNumberid(int flag)          {               switch (flag)          {         case 1:...

Android ORM——初识greenDAO 3及使用greenDAO 3前应该掌握的一些知识点(一)

引言 总所周知,SQLite——内嵌于Android中一个占用内存极小的关系型,作为我们Android存储领域中重要的一员 ,或多或少都曾接触到数据库。即使Android系统中提供了很多操作SQLite的API,可是在业务开发中还是须要手动去编写原生SQL语句,这不仅复杂、不好维护。更重要的是不高效,经常会由于SQL语句写错而添加了开发成本,于是便出现...

Java生成excel导出文件(使用poi+JXL)

1.使用poi生成文件 package com.mi.entity; import java.util.Date; public class Student { private int id; private String name; private int age; private Date birth;...

springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截

1.目的:实现全局异常拦截,不用在controller在写try catch,使用代码看起来更加整洁 2.不啰嗦直接上代码 2.1首先我们创建一个异常捕获处理类(@RestControllerAdvice = @ControllerAdvice + @ResponseBody) @RestControllerAdvice@Slf4jpublic cla...