根据小时判断是否在划分好的时间段 去if-else

一、情景描述:

1、需将一天的时间分为N段
2、需要判断当前时间属于哪个时间段
3、时间段一般都使用enum来标识

二、问题

1、时间若划分的比较细,就需要写好多if-else来判断
2、每次需要遍历enum

三、开门见山(方案):

1、将enum在静态块中遍历放入Map,得到一个key(小时)- value(对应属于的enum)的Map
2、提供一个静态方法,根据小时获得对应的enum
3、使用switch代替if-else,使代码更明了

四、示例

1、时间划分enum

@Getter
public enum TimeEnum {

    FIRST(0, 7, "第一个时间段"),
    SECEND(8, 19, "第二个时间段"),
    THIRD(20, 23, "第三个时间段"),
    ;

    /** 开始时间 */
    private Integer start;
    /** 结束时间 */
    private Integer end;
    /** 时间段说明 */
    private String msg;

    private static Map TIME_ENUM_MAP = new HashMap<>(24);

    static {
        for (TimeEnum timeEnum : TimeEnum.values()) {
            for (int i = timeEnum.start; i <= timeEnum.end; i++) {
                TIME_ENUM_MAP.put(i, timeEnum);
            }
        }
    }
    
    /**
     * 根据当前小时获得对应的enum
     * @param time 当前小时
     * @return 对应的enum
     */
    public static TimeEnum getTimeEnumBuyTime(Integer time) {
        if (time == null) {
            throw new SellException(ResultEnum.TIME_OUT_WISH);
        }
        TimeEnum timeEnum = TIME_ENUM_MAP.get(time);
        if (timeEnum == null) {
            throw new SellException(ResultEnum.TIME_OUT_WISH);
        }
        return timeEnum;
    }

    TimeEnum(Integer start, Integer end, String msg) {
        this.start = start;
        this.end = end;
        this.msg = msg;
    }
}

注:@Getter是使用了lombok,用来生成getter方法的,若未引用lombok,需手动生成getter方法
2、测试并使用

public static void main(String[] args) {
        Integer time = 10;
        TimeEnum timeEnumBuyTime = TimeEnum.getTimeEnumBuyTime(time);
        switch (timeEnumBuyTime) {
            case FIRST:
                System.out.println(TimeEnum.FIRST.getMsg());
                break;
            case SECEND:
                System.out.println(TimeEnum.SECEND.getMsg());
                break;
            case THIRD:
                System.out.println(TimeEnum.SECEND.getMsg());
                break;
            default:
                System.out.println("不期望的情况");
        }
    }

out:第二个时间段

如果有哪位有更好的办法请留言告诉一声,多谢(з)-☆

你可能感兴趣的:(根据小时判断是否在划分好的时间段 去if-else)