首页 > 编程语言 >JAVA List和Map切割方法

JAVA List和Map切割方法

时间:2023-05-25 18:02:16浏览次数:45  
标签:Map JAVA tem iterator List chunkNum new total


import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


public class CollectionUtil {

    /**
     * 将map切成段,作用与PHP的array_chunk函数相当
     *
     * @param chunkMap 被切段的map
     * @param chunkNum 每段的大小
     * @param <k>      map的key类型
     * @param <v>      map的value类型 如果是自定义类型,则必须实现equals和hashCode方法
     * @return
     */
    public static <k, v> List<Map<k, v>> mapChunk(Map<k, v> chunkMap, int chunkNum) {
        if (chunkMap == null || chunkNum <= 0) {
            List<Map<k, v>> list = new ArrayList<>();
            list.add(chunkMap);
            return list;
        }
        Set<k> keySet = chunkMap.keySet();
        Iterator<k> iterator = keySet.iterator();
        int i = 1;
        List<Map<k, v>> total = new ArrayList<>();
        Map<k, v> tem = new HashMap<>();
        while (iterator.hasNext()) {
            k next = iterator.next();
            tem.put(next, chunkMap.get(next));
            if (i == chunkNum) {
                total.add(tem);
                tem = new HashMap<>();
                i = 0;
            }
            i++;
        }
        if(!CollectionUtils.isEmpty(tem)){
            total.add(tem);
        }
        return total;
    }


    /**
     * 将list切割
     *
     * @param chunkList 被分隔的数组
     * @param chunkNum  每段的大小
     * @param <T>       List中的类型
     * @return
     */
    public static <T> List<List<T>> listChunk(List<T> chunkList, int chunkNum) {
        if (chunkList == null || chunkNum <= 0) {
            List<List<T>> t = new ArrayList<>();
            t.add(chunkList);
            return t;
        }
        Iterator<T> iterator = chunkList.iterator();
        int i = 1;
        List<List<T>> total = new ArrayList<>();
        List<T> tem = new ArrayList<>();
        while (iterator.hasNext()) {
            T next = iterator.next();
            tem.add(next);
            if (i == chunkNum) {
                total.add(tem);
                tem = new ArrayList<>();
                i = 0;
            }
            i++;
        }
        if(!CollectionUtils.isEmpty(tem)){
            total.add(tem);
        }
        return total;
    }

}

 

标签:Map,JAVA,tem,iterator,List,chunkNum,new,total
From: https://blog.51cto.com/chengzheng183/6350525

相关文章

  • java两个对象属性比较
    两个对象进行比较相等,有两种做法:1,情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用类反射,具体代码如下:publicstaticvoidmain(String[]args){Aa=newA();a.setUserName(......
  • IDEA下查看Java字节码(插件ByteCode Viewer)
    安装jclasslibbytecodeviewer插件 使用结果......
  • jenkins--构建传输jar包后启动java服务
    jenkins--构建传输jar包后启动java服务目标:针对单体java服务前置条件:jdk1.8日志切割cronologjdk1.8安装cronolog安装创建server.sh脚本文件#!/bin/bashJAR_PATH="/data/forwarder"#文件目录JAR_FILE="ruoyi-admin.jar"#文件名LOG_PATH="/data/forwarder/logs"#cro......
  • 【打怪升级】【容器】关于Map
    关于Map接口,具体的实现有HashMap、HashTable、TreeMap等 HashMap老规矩,如果我们要看源码,我们要从这么几点去看:它的继承结构、它的核心实现能力。我们知道hashMap是一个kv容器,那么它的实现其实主要取决于这几点:1.存放 如何处理hash冲突怎么存?2.获......
  • [Javascript] Generator with example - 1
    Differencebetween yieldand returnreturnset donetotrue/***Example1*/function*loggerator(){console.log("running");yield"paused";console.log("runningagain");return"stopped";}letlogger=......
  • Java的访问控制修饰符
    为什么使用访问控制修饰符使用访问控制修饰符,主要是为了实现信息的隐藏,在编写程序时,有些核心数据往往不希望被用户调用,需要控制这些数据的访问。对类成员访问的限制,有利于防止对象的误用。只允许通过一系列定义完善的方法来访问私有数据,就可以(通过执行范围检查)防止数据赋予不正......
  • java removeAll 返回2个数组的差集
    注意:removeAll不是差集importjava.util.ArrayList;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){ArrayList<String>objArray=newArrayList<String>();ArrayList<String>objArray2=newArrayList......
  • Netbeans开发—JAVA 作业之求素数
        JAVA课上的一个作业:求比给定的数小的所有素数并打印出来    准备工作:    1)用Netbeans新建一个JavaApplication     2)创建文件目录(根据个人习惯创建文件目录),我的目录如下:        3)创建本工程的JAVA文件:Prime.java              ......
  • javascript prototype and class
    js中的prototype绝对是js的一个重要知识点,有点像delegate的模式,和oop对象形式还是有些差别的,尽管可以做同样的事情。简要学习可以参见:https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes关于js的class和java的语法很像,参见:https://develope......
  • Fdog系列(二):html写完注册页面之后怎么办,用java写后台响应呀。
    文章目录1.前言2.创建javaweb项目3.创建Server4.解决中文乱码问题5.响应后台数据目录Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。所有文章源码已整体打包上传至github,求星星!1.前言接着第一篇用html完成了注册页面,第二篇,我们来完成后台数据处理,需要用......