Java好用的小工具类

1、字符串日期获取当前日期的星期一
        //获取当前日期
        LocalDate currentDate = LocalDate.parse(date);
        //计算当前日期是星期几
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
        //判断星期几是否大于1(如果当前日期不是本周的第一天,需要计算第一天的偏移量)
        int offset = DayOfWeek.MONDAY.getValue() - dayOfWeek.getValue();
        //计算本周的第一天
        LocalDate firstDayOfWeek = currentDate.plusDays(offset);
2、批量数据分批推送
// 创建一个包含30条数据的列表
        List<String> dataList = new ArrayList<>();
        for (int i = 1; i <= 30; i++) {
            dataList.add("Data " + i);
        }

        // 每次推送的数据数量
        int batchSize = 5;

        // 计算需要推送的批次数量
        int totalBatches = (int) Math.ceil((double) dataList.size() / batchSize);

        // 循环推送每个批次的数据
        for (int batch = 0; batch < totalBatches; batch++) {
            int fromIndex = batch * batchSize;
            int toIndex = Math.min(fromIndex + batchSize, dataList.size());

            // 获取当前批次的数据
            List<String> currentBatch = dataList.subList(fromIndex, toIndex);

            // 推送当前批次的数据
            pushData(currentBatch);
        }
3、一张表多行根据条件合并成不同字段的一行
-- 表设计如下
CREATE TABLE "capability_manage"."ssa_result_station_base" (
  "order_id" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
  "order_name" varchar(255) COLLATE "pg_catalog"."default",
  "key_string" varchar(255) COLLATE "pg_catalog"."default",
  "key_sheet" varchar(100) COLLATE "pg_catalog"."default",
  "key_value" varchar(255) COLLATE "pg_catalog"."default",
  "value_type" varchar(255) COLLATE "pg_catalog"."default",
  "insert_time" timestamp(6)
)

--插入数据
INSERT INTO "capability_manage"."ssa_result_station_base" ("order_id", "order_name", "key_string", "key_sheet", "key_value", "value_type", "insert_time") VALUES ('xxxxxxx41', '测试工单1', '地市', NULL, '西安', 'string', NULL);
INSERT INTO "capability_manage"."ssa_result_station_base" ("order_id", "order_name", "key_string", "key_sheet", "key_value", "value_type", "insert_time") VALUES ('xxxxxxx41', '测试工单1', '站型', NULL, '室分', 'string', NULL);
-- 具体表数据如下图,我们能要根据key_string不同,分别拆成一行的多个不同列,sql如下
WITH aggregated_data AS (
    SELECT
        order_id,
        jsonb_object_agg(key_string, key_value) AS key_values
    FROM
        ssa_result_station_base
    GROUP BY
        order_id
)
SELECT
    order_id,
    key_values->>'地市' AS regionName,
    key_values->>'站型' AS siteType
FROM
    aggregated_data;
-- 具体结果如下图

在这里插入图片描述
在这里插入图片描述

4、分批保存

如果批量保存的时候,一次太多,可以拆分后,保存

            //每次批量的条数
            int numberBatch = 300;
            double number = checkList.size() * 1.0 / numberBatch;
            // 向上取整
            int n = ((Double)Math.ceil(number)).intValue();
            for(int i = 0; i < n; i++){
                int end = numberBatch * (i + 1);
                // end不能超过最大索引值
                if(end > checkList.size()){
                    end = checkList.size();
                }
                // 分批插入数据库
                this.centralizedAnalysisOrderCheckDao.insertBatch(checkList.subList(numberBatch * i , end));
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值