Java Map拆分成子Map 阿猫阿狗大作战 • 2022-12-17 • 随笔 • 阅读 27 Java Map拆分成子Map private static List> mapChunk(Map map, int chunkSize){ if(Objects.isNull(map) || map.isEmpty()){ //空map,无法拆分 return Collections.emptyList(); } List> list = Lists.newArrayListWithExpectedSize(chunkSize); if(chunkSize <= 1){ //拆分数<=1, 直接添加并返回 list.add(map); return list; } Iterator> iterator = map.entrySet().iterator(); int chunkIndex = 0; //当前分段的下标,[0, chunkSize-1] int restCount = map.size()%chunkSize; //平均后剩余 int totalCount0 = map.size()/chunkSize; //每个分段键值对数量,最后一个分段装入剩余的所有 int totalCount1 = totalCount0 + 1; int totalCount; int count = 0; //每个分段的计数 Map subMap = new HashMap<>(); while (iterator.hasNext()){ if(chunkIndex < restCount){ totalCount = totalCount1; //分不完的部分,给部分分段多分1个, 可保证尽量均匀 }else{ totalCount = totalCount0; } Map.Entry entry = iterator.next(); if(chunkIndex == chunkSize-1){ //最后一个分段单独处理 //最后一个分段,有多少添加多少 subMap.put(entry.getKey(), entry.getValue()); }else if(count < totalCount){ //除了最后一个分段,每个分段放totalCount个键值对 subMap.put(entry.getKey(), entry.getValue()); count ++; //计次+1 }else{ //结束上一个分段 list.add(subMap); //装满了->加入列表 chunkIndex ++; //分段个数+1 //开始下一个分段 subMap = new HashMap<>(); //新的分段 subMap.put(entry.getKey(), entry.getValue()); //添加当前键值对 count = 1; //计数重置为1 } } list.add(subMap); return list; } public static void main(String[] args) { Map map = new HashMap<>(); map.put("a", "1"); map.put("b", "2"); map.put("c", "3"); map.put("d", "4"); map.put("e", "5"); map.put("f", "6"); map.put("g", "7"); System.out.println(mapChunk(map, 5)); } 输出: [{a=1, b=2}, {c=3, d=4}, {e=5}, {f=6}, {g=7}] 欢迎分享,转载请注明来源:内存溢出原文地址: http://outofmemory.cn/zaji/5697345.html 分段 拆分 添加 计数 计次 赞 (0) 打赏 微信扫一扫 支付宝扫一扫 阿猫阿狗大作战 一级用户组 0 0 生成海报 springSecurity 上一篇 2022-12-17 JSP技术 下一篇 2022-12-17 发表评论 请登录后评论... 登录后才能评论 提交 评论列表(0条)
评论列表(0条)