• 集合及数组小脚本


    前言

    处理集合或数组的一些小脚本。

    一、集合

    1.1分隔集合

    /*** 按指定大小,分隔集合,将集合按规定个数分为n个部分
     * * @param list
     * @param len
     * @return*/                
    public static List<List<?>> splitList(List<?> list, int len) {
        if (list == null || list.size() == 0 || len < 1) {
             return null;
         } 
        List<List<?>> result = new ArrayList<List<?>>();  
        int size = list.size();
        int count = (size + len - 1) / len;  
        for (int i = 0; i < count; i++) {
            List<?> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
            result.add(subList);
        }
        return result;
    }   

    1.2集合根据某一字段分组

    实体类
    public class SkuVo {
        //实体类
        private Long skuId;
        private String productName;
        private Long brandStoreSn;
    
        public SkuVo(Long skuId, String productName, Long brandStoreSn) {
            super();
            this.skuId = skuId;
            this.productName = productName;
            this.brandStoreSn = brandStoreSn;
        }
    
        public Long getSkuId() {
            return skuId;
        }
        public void setSkuId(Long skuId) {
            this.skuId = skuId;
        }
        public String getProductName() {
            return productName;
        }
        public void setProductName(String productName) {
            this.productName = productName;
        }
        public Long getBrandStoreSn() {
            return brandStoreSn;
        }
        public void setBrandStoreSn(Long brandStoreSn) {
            this.brandStoreSn = brandStoreSn;
        }
    
        @Override
        public String toString() {
            return "SkuVo [skuId=" + skuId + ", productName=" + productName + ", brandStoreSn=" + brandStoreSn + "]";
        }
    }
    
    测试类:
    public class OutStandingServiceImpl {
    
        public static void main(String[] args) {
            //将集合根据某一字段进行分组
            /*1、准备数据**/
            SkuVo sku1 = new SkuVo(1L,"p1",100L);
            SkuVo sku2 = new SkuVo(2L,"p2",101L);
            SkuVo sku3 = new SkuVo(3L,"p3",102L);
            SkuVo sku4 = new SkuVo(3L,"p4",103L);
            SkuVo sku5 = new SkuVo(2L,"p5",100L);
            SkuVo sku6 = new SkuVo(5L,"p6",100L);
    
            List<SkuVo> skuVoList = Arrays.asList(new SkuVo [] {sku1,sku2,sku3,sku4,sku5,sku6});
    
            /*2、分组算法**/
            Map<Long, List<SkuVo>> skuIdMap = new HashMap<>();
            for (SkuVo skuVo : skuVoList) {
                List<SkuVo> tempList = skuIdMap.get(skuVo.getSkuId());
                /**zs批注:
                 * 【1】此处获取tempList时的条件应为多个字段,应放入集合或数组中,而不仅仅为一个id字段,map的key应为一个数组或是集合;
                 * 【2】通过配置的工具类获取group by的分组数组的集合字段,---》这里应更加的通用,可以灵活增删字段,变化分组维度。
                 * 【3】查询分组字段的值,放入一个数组或集合。
                */
                /*如果取不到数据,那么直接new一个空的ArrayList**/
                if (tempList == null) {
                    tempList = new ArrayList<>();
                    tempList.add(skuVo);
                    skuIdMap.put(skuVo.getSkuId(), tempList);
                }
                else {
                    /*某个sku之前已经存放过了,则直接追加数据到原来的List里**/
                    tempList.add(skuVo);
                }
            }
    
            /*3、遍历map,验证结果**/
            for(Long skuId : skuIdMap.keySet()){
                System.out.println(skuIdMap.get(skuId));
            }
        }
    }

    1.3将集合按照某些字段进行分组并处理数据

    实体类
    package com.asd.modules.pojo.zsTest;
    
    public class Bill {
    
        private String type;
        private String state;
        private Integer money;
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public String getState() {
            return state;
        }
        public void setState(String state) {
            this.state = state;
        }
        public Integer getMoney() {
            return money;
        }
        public void setMoney(Integer money) {
            this.money = money;
        }
    }
    测试类package com.asd.modules.pojo.zsTest;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MergeList1 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            List<Bill> list = new ArrayList<Bill>();
            Bill b = new Bill();
            b.setType("A");
            b.setMoney(1);
            b.setState("中");
            list.add(b);
            b = new Bill();
            b.setType("B");
            b.setState("大");
            b.setMoney(2);
            list.add(b);
            b = new Bill();
            b.setType("C");
            b.setMoney(3);
            b.setState("大");
            list.add(b);
            b = new Bill();
            b.setType("A");
            b.setMoney(2);
            b.setState("大");
            list.add(b);
            b = new Bill();
            b.setType("B");
            b.setMoney(2);
            b.setState("中");
            list.add(b);
            b = new Bill();
            b.setType("C");
            b.setMoney(3);
            b.setState("大");
            list.add(b);
    
            b = new Bill();
            b.setType("A");
            b.setMoney(1);
            b.setState("中");
            list.add(b);
            b = new Bill();
            b.setType("B");
            b.setState("中");
            b.setMoney(2);
            list.add(b);
            b = new Bill();
            b.setType("C");
            b.setState("大");
            b.setMoney(3);
            list.add(b);
            b = new Bill();
            b.setType("C");
            b.setState("大");
            b.setMoney(1);
            list.add(b);
    
            List<Bill> bi = new ArrayList<Bill>();
            for (Bill bill : list) {
                boolean flag = false;
                String a1 = bill.getType()+","+bill.getState();
                for (Bill bills : bi) {
                    String a2 = bills.getType()+","+bills.getState();
                    if(a1.equals(a2)){
                        int money = bills.getMoney();
                        money += bill.getMoney();
                        bills.setMoney(money);
                        flag = true;
                    }
                }
                if(!flag){
                    bi.add(bill);
                }
            }
    
            for (Bill bill : bi) {
                System.out.println(bill.getType() +"    " +bill.getState()+"    "+bill.getMoney());
            }
        }
    }

    二、数组

    2.1移除某一数组某一索引的值

    package com.asd.modules.controller;
    
    import java.util.*;
    import java.lang.*;
    
    public class Tests {
    
        public static void main(String args[]) throws Exception{
    
            int[] arr={1,2,3,4,5,6};
            arr=remove(arr,0);// 移除下标为2的元素
            for(int x:arr) System.out.println("x="+x);// 移除后数组剩下的元素
    
        }
        // 移除数组指定下标的元素 重载+1
        private static int[] remove(int[] array,int index){
            return (int[]) remove((Object) array, index);
        }
    
        // 移除数组指定下标的元素 重载+2
        private static Object remove(Object array,int index){
    
            int length = java.lang.reflect.Array.getLength(array);
            if (index < 0 || index >= length) {
                throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
            }
    
            Object result=java.lang.reflect.Array.newInstance(array.getClass().getComponentType(),length-1);
            // 截取被删除的前半部分
            System.arraycopy(array, 0, result, 0, index);
    
            if (index < length - 1) {
                // 截取被删除的后半部分
                System.arraycopy(array, index + 1, result, index, length - index - 1);
            }
    
            return result;
        }
    }

    2.2数组消除字符串空格

    String[] trimmedArray = new String[array.length];
    for (int i = 0; i < array.length; i++)
        trimmedArray[i] = array[i].trim();
    现在trimmedArray包含与数组相同的字符串,但没有前导和尾随空格。或者,您可以在同一个数组中原位修改字符串:
    for (int i = 0; i < array.length; i++)
        array[i] = array[i].trim();

    三、其他

    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    hdu 1348【凸包模板】
    hdu 3007【最小圆覆盖-随机增量法模板】
    poj 2187【旋转卡壳模板】
    bzoj 2618【半平面交模板】
    hdu1115【多边形求重心模板】
    bzoj 1006: [HNOI2008]神奇的国度【弦图+LesBFS】
    bzoj 3456: 城市规划【NTT+多项式求逆】
    bzoj 2194: 快速傅立叶之二【NTT】
    bzoj 4555: [Tjoi2016&Heoi2016]求和【NTT】
    bzoj 4842: [Neerc2016]Delight for a Cat【最小费用最大流】
  • 原文地址:https://www.cnblogs.com/szrs/p/15258000.html
Copyright © 2020-2023  润新知