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

/**
     * 数据补全
     * 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));
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java工具类,可以使用EasyExcel库将数据填充到Excel中,并合并具有相同属性的行。 ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.merge.AbstractMergeStrategy; import com.alibaba.excel.write.merge.LoopMergeStrategy; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteWorkbook; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * EasyExcel填充数据并合并相同属性的工具类 */ public class EasyExcelUtil { /** * 填充数据并合并相同属性的行 * * @param filePath 文件路径 * @param sheetName 工作表名称 * @param header 头部 * @param data 数据 * @param mergeIndex 需要合并的列的索引 */ public static void fillAndMerge(String filePath, String sheetName, List<String> header, List<List<String>> data, int mergeIndex) { // 创建一个Excel写工具 ExcelWriter writer = EasyExcel.write(filePath).build(); // 创建一个工作表 WriteSheet sheet = EasyExcel.writerSheet(sheetName).build(); // 将数据按照相同的属性分组 Map<String, List<List<String>>> groupMap = groupByProperty(data, mergeIndex); // 遍历分组后的数据,将每个分组写入Excel中 groupMap.forEach((property, groupData) -> { // 写入头部 writer.writeHeader(header, sheet); // 写入数据 writer.write(groupData, sheet); // 合并相同属性的行 AbstractMergeStrategy mergeStrategy = new LoopMergeStrategy(property, mergeIndex); mergeStrategy.merge(sheet, writer); }); // 关闭Excel写工具 writer.finish(); } /** * 将数据按照指定的属性分组 * * @param data 数据 * @param mergeIndex 需要合并的列的索引 * @return 分组后的数据,Map的键为属性值,值为数据列表 */ private static Map<String, List<List<String>>> groupByProperty(List<List<String>> data, int mergeIndex) { return data.stream().collect(Collectors.groupingBy(row -> row.get(mergeIndex))); } } ``` 使用示例: ```java public class Main { public static void main(String[] args) { // 准备数据 List<String> header = new ArrayList<>(); header.add("姓名"); header.add("年龄"); header.add("性别"); List<List<String>> data = new ArrayList<>(); data.add(Arrays.asList("张三", "20", "男")); data.add(Arrays.asList("李四", "22", "男")); data.add(Arrays.asList("王五", "20", "女")); data.add(Arrays.asList("赵六", "22", "女")); // 填充数据并合并相同属性的行 EasyExcelUtil.fillAndMerge("test.xlsx", "Sheet1", header, data, 2); } } ``` 在这个示例中,我们将数据按照性别分组,并将具有相同性别的行合并在一起。因此,输出的Excel文件将具有两行,每行具有两个单元格,显示相同性别的人的姓名和年龄。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值