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); } }