java 补全时间,填充数据,工具类

本文介绍了一种数据补全算法,该算法通过填充指定天数内的数据,实现数据集的完整性增强。具体实现中,算法接收填充数据、填充字段、日期字段名、填充天数及格式作为参数,遍历指定天数,检查数据集中是否已存在对应日期记录,若不存在,则依据模板创建新记录并补充缺失字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
     * 数据补全
     * Map<String, Object> map = new HashMap();
     * map.put("ssss", "123");
     * List<Map<String, Object>> objects = new ArrayList<>();
     * Map<String, Object> map1 = new HashMap();
     * map1.put("ssss", "1235");
     * map1.put("day", "01");
     * objects.add(map1);
     * List<Map<String, Object>> day = fillTime(objects, map, "day", 12,null);
     * List<Map<String, Object>> day1 = fillTime(objects, map, "day", 12,"2020-12-%02d 00:00:00");
     *
     * @param fillData  填充的数据
     * @param fillField 填充的字段
     * @param key       日期的字段名
     * @param fillDay   填充的天数
     * @param format    格式
     * @return
     */
    public static List<Map<String, Object>> fillTime(List<Map<String, Object>> fillData,
                                                     Map<String, Object> fillField, String key, int fillDay, String format) {
        List<Map<String, Object>> returnVal = new ArrayList<>();
        Assert.notEmpty(fillField, "There are no fields to fill in");
        if (StringUtils.isEmpty(format)) format = "%02d";
        for (int i = 1; i < fillDay + 1; i++) {
            String dayStr = String.format(format, i);
            fillData.stream()
                    .filter(map -> map.containsKey(key) && map.get(key).equals(dayStr))
                    .forEach(map -> {
                        for (String str : fillField.keySet()) {
                            if (!map.containsKey(str)) {
                                map.put(str, fillField.get(str));
                            }
                        }
                        returnVal.add(map);
                        return;
                    });
            Map<String, Object> dayMap = new HashMap<>(12);
            dayMap.put(key, dayStr);
            dayMap.putAll(fillField);
            returnVal.add(dayMap);
        }
        return returnVal;
    }

    public static void main(String[] args) {
        Map<String, Object> map = new HashMap();
        map.put("ssss", "1235");
        List<Map<String, Object>> objects = new ArrayList<>();
        Map<String, Object> map1 = new HashMap();
        map1.put("ssss", "123");
        map1.put("day", "01");
        objects.add(map1);
        List<Map<String, Object>> day = fillTime(objects, map, "day", 12, "");
        System.out.println(Arrays.asList(day));
        List<Map<String, Object>> day1 = fillTime(objects, map, "day", 31, "2020-12-%02d 00:00:00");
        System.out.println(Arrays.asList(day1));
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值