当前位置: 首页 > article >正文

通过枚举值调用函数

在做业务的时候,需要根据前端传递的不同枚举参数(比如说0,1)返回对应固定的值。但是这个值需要根据时间又有所变化。我们可以使用if-else去实现对应的逻辑,比如说,当前端传递参数为0是,需要返回当月一号到当前日期的号数。当传递的参数为1时,需要返回当前年份的1月到当前日期的月份。我们可以进行如下处理

public List<Integer> test(Integer type){
    if(type == 0){
        // 对应生成天数的代码
    }else if(type == 1){
        // 对应生成月份的代码
    }
    return ...;
}

 这是枚举值较少的时候,我们这么做也不是不能接受,但是当参数较多时,我们最好还是使用枚举来减少if-else的出现。因此,使用枚举类来处理时,上述代码可以化简为

@Getter
@AllArgsConstructor
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum DateTypeEnum {
    /**
     * 生成 00:00 至 当前时间最近15分钟的时间段集合
     */
    DAY(1, () -> {
        LocalTime current = LocalTime.now().truncatedTo(ChronoUnit.MINUTES);
        LocalTime startTime = LocalTime.MIDNIGHT;
        List<String> intervals = new ArrayList<>();
        while (!startTime.isAfter(current)) {
            intervals.add(startTime.toString());
            startTime = startTime.plusMinutes(15);
        }
        return intervals;
    }),
    /**
     * 生成当前月份1号至当前日期的时间段集合
     */
    MONTH(2, () -> {
        int dayOfMonth = LocalDate.now().getDayOfMonth();
        List<String> days = new ArrayList<>();
        for (int i = 1; i <= dayOfMonth; i++) {
            days.add(String.valueOf(i));
        }
        return days;
    }),
    /**
     * 生成当年1月份至当前月份的时间段集合
     */
    YEAR(3, () -> {
        LocalDate current = LocalDate.now();
        int currentMonth = current.getMonthValue();
        List<String> dateList = new ArrayList<>();
        for (int i = 1; i <= currentMonth; i++) {
            dateList.add(Month.of(i).getDisplayName(TextStyle.FULL, Locale.CHINA));
        }
        return dateList;
    });
    private Integer code;
    private Supplier<List> desc;
    public static final List<DateTypeEnum> LIST =
            Arrays.stream(values()).toList();
    public static final Map<Integer, DateTypeEnum> MAP = LIST.stream()
            .collect(Collectors.toMap(DateTypeEnum::getCode, f -> f));

    public static DateTypeEnum ofCode(Integer code) {
        return MAP.get(code);
    }
}


http://www.kler.cn/a/443524.html

相关文章:

  • Spring 核心技术解析【纯干货版】- IV:Spring 切面编程模块 Spring-Aop 模块精讲
  • 大模型系列——旋转位置编码和长度外推
  • Linux-掉电保护方案
  • [算法] [leetcode-324] 摆动排序 II
  • 前端编码技巧与规范
  • loguru简单使用案例
  • 详解CompletableFuture
  • 写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践
  • SSM 寝室管理系统:住宿管理的科技之光
  • 腾讯地图+vue实现后台设置某外卖店铺的位置坐标
  • SAP抓取外部https报错SSL handshake处理方法
  • java不用启动项目测试方法
  • Node.js的Web服务在Nacos中的实践
  • Oracle筑基篇-体系结构概览
  • 【开源库 | minizip】Linux(Ubuntu18.04)下,minizip的编译、交叉编译
  • 使用CSS把背景图片铺满屏幕
  • Windows Server 2019 配置PHP环境(图文教程)
  • RFdiffusion get_torsions函数解读
  • NGINX的安装和配置(Linux环境)
  • 文心快码代码助手智能体:智能体时代委托自主完成任务
  • 使用ollama编写大模型客户端
  • mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
  • 如何使用 Python 处理数据库事务?
  • spring boot密码加密方式
  • opencascade配置笔记
  • QNX通过pfctl工具查看socket通信状态