轮休机制算法

public static void main(String[] args) {
    //循环查找匹配的轮休方案
    List<Integer> workforceSetUsers = new LinkedList<>();
    workforceSetUsers.add(1);
    workforceSetUsers.add(2);
    workforceSetUsers.add(3);
    workforceSetUsers.add(4);
    workforceSetUsers.add(5);
    workforceSetUsers.add(6);
    workforceSetUsers.add(7);
    workforceSetUsers.add(8);
    workforceSetUsers.add(9);

    //分成七组对应周一到周日
    HashMap<Integer, List<Integer>> map = new HashMap<>(7);
    map.put(1,new LinkedList<Integer>());
    map.put(2,new LinkedList<Integer>());
    map.put(3,new LinkedList<Integer>());
    map.put(4,new LinkedList<Integer>());
    map.put(5,new LinkedList<Integer>());
    map.put(6,new LinkedList<Integer>());
    map.put(7,new LinkedList<Integer>());

    //每周休息天数
    Integer restDays = 2;

    for (int i = 0; i < workforceSetUsers.size()*restDays; i++) {
        Integer integer = workforceSetUsers.get(i/restDays);
        List<Integer> integers = map.get(i % 7 + 1);
        integers.add(integer);
        map.put(i % 7 + 1,integers);
    }

    Set<Integer> keySets = map.keySet();

    for (Integer key : keySets) {
        System.err.println(map.get(key));
    }

    DateTime begin = DateUtil.beginOfMonth(DateUtil.date(new Date()));
    DateTime nextMonth = DateUtil.offsetMonth(begin, 1);

    while (begin.getTime() < nextMonth.getTime()) {
        Week week = DateUtil.dayOfWeekEnum(begin);
        List<Integer> restUsers = map.get(week.getValue());
        List<Integer> workUsers = workforceSetUsers.stream().filter(it -> !restUsers.contains(it)).collect(Collectors.toList());
        System.err.println("时间:" + begin.toString("MM-dd") +"--->休息组人员:" + restUsers + "--->" + "工作组人员:" + workUsers);
        begin = DateUtil.offsetDay(begin, 1);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值