ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java实现List按条件分成多个子List

2021-05-17 11:58:09  阅读:449  来源: 互联网

标签:分成 Java name List dept put new inList


一、业务场景

相信很多开发的小伙伴都有遇到过需要对表按特定条件进行查询,然后再进行归类,比如:对员工表进行检索,然后分别按他们所在的部门进行归类,一般的做法都是按部门唯一标识(比如部门编号、部门名称等)进行一次一次查询,这样做的缺点显而易见,会造成与数据库的多次连接,从而影响效率和性能。而我的做法是直接对员工表进行一次全部读取,然后在本地根据条件再进行归类,这就涉及到需要对List进行处理,将父List直接拆分成多个子List。当然,上面举的例子只是最简单的业务场景,实际场景可能错综复杂,但

二、Java实现

话不多说,直接上代码。当然,上面举的例子只是最简单的业务场景,实际场景可能错综复杂,但我下面提供参考的这段代码已经够用了。

package com.ruoyi.web.test;

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 DealList {
	
    /**
     * 按照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>> change(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("dept", "开发部");
		map1.put("name", "张三");

		map2.put("dept", "业务部");
		map2.put("name", "李华");

		map3.put("dept", "开发部");
		map3.put("name", "李四");

		map4.put("dept", "业务部");
		map4.put("name", "王明");

		inList.add(map1);
		inList.add(map2);
		inList.add(map3);
		inList.add(map4);
		System.out.println("原始的List:" + inList);

		List<Map<String, Object>> outList = new ArrayList<Map<String, Object>>();
		outList = change(inList, "dept", outList);
		System.out.println("处理后的List:" + outList);

	}
}

结果:

原始的List:[{name=张三, dept=开发部}, {name=李华, dept=业务部}, {name=李四, dept=开发部}, {name=王明, dept=业务部}]
处理后的List:[{array=[{name=张三, dept=开发部}, {name=李四, dept=开发部}], text=开发部}, {array=[{name=李华, dept=业务部}, {name=王明, dept=业务部}], text=业务部}]

标签:分成,Java,name,List,dept,put,new,inList
来源: https://blog.csdn.net/qq_42109746/article/details/116921966

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有