List<Date> 拆分多个List<Date>,按照周六周日

如2018-04-12到2018-04-24的list
按照周六周日拆分如下:
2018-04-12到2018-04-13
2018-04-14到2018-04-15
2018-04-16到2018-04-20
2018-04-21到2018-04-22
2018-04-23到2018-04-24

 public static void main(String[] args) {
        Date d1 = new Date(2018-1900,03,12);
        Date d2 = new Date(2018-1900,03,13);
        Date d3 = new Date(2018-1900,03,14);
        Date d4 = new Date(2018-1900,03,15);
        Date d5 = new Date(2018-1900,03,16);
        Date d6 = new Date(2018-1900,03,17);
        Date d7 = new Date(2018-1900,03,18);
        Date d8 = new Date(2018-1900,03,19);
        Date d9 = new Date(2018-1900,03,20);
        Date d10 = new Date(2018-1900,03,21);
        Date d11 = new Date(2018-1900,03,22);
        List<Date> l1 = new ArrayList<Date>();
        l1.add(d1);
        l1.add(d2);
        l1.add(d3);
        l1.add(d4);
        l1.add(d5);
        l1.add(d6);
        l1.add(d7);
        l1.add(d8);
        l1.add(d9);
        l1.add(d10);
        l1.add(d11);
        int j = 0;
        for(int i = 0;l1.size()>i;i++){
            Date currentDate=l1.get(i);
            Calendar cal = Calendar.getInstance();
            cal.setTime(currentDate);
            if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
                    List<Date> subList = l1.subList(j, i); 
                    j=i;
                    System.out.println(j); 
                    System.out.println(subList); 
             }else if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
                 int k = i+1;
                 List<Date> subList = l1.subList(j, k);    
                    System.out.println(subList);
                    j=k;
                    System.out.println(j);

             }
        }

    }

图片说明这个是后台打印结果

将List遍历按索引取出,根据Calendar判断是否为周六,如果是截取索引为0到这个日期为周六的索引,再次从这个索引往下判断,如果是周天则截取,这样一直循环就可以了

Date currentDate=new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(currentDate);
if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){

    }这个可以判断周六周日
 public class GetTwoList {
    public static void main(String[] args) throws ParseException {
        List<Date> dateList = new ArrayList<>();

        //先初始化List<Date>
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String tempStr = "2018-04-";
        for(int i = 12;i<=24;i++){
            String dateTemp = tempStr + String.valueOf(i);
            dateList.add(format.parse(dateTemp));
        }
        //根据周六周日放在两个list里
        List<Date> saturdayList = new ArrayList<>();
        List<Date> sundayList = new ArrayList<>();
        Calendar cal = Calendar.getInstance();
        for(int i = 0; i< dateList.size();i++){
            cal.setTime(dateList.get(i));
            if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
                saturdayList.add(dateList.get(i));
            }else if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
                sundayList.add(dateList.get(i));
            }
        }

        System.out.println(saturdayList);
        System.out.println(sundayList);

    }
}

```public static void main(String[] args){
String sePattern = "-";
format = new SimpleDateFormat("yyyy"+sePattern+"MM"+sePattern+"dd");

    List<Date> ds = getDateList("2018-4-12", "2018-4-24", sePattern);

    Map<Integer,  List<Date>> ms = getDateMap(ds, sePattern);

    ms.forEach((key, value) -> {System.out.println(key +":"+ value);});

}


/**
 * 判断当前日期是星期几
 *
 * @param pTime 修要判断的时间
 * @return dayForWeek 判断结果
 * @Exception 发生异常
 */
public static int dayForWeek(String pTime, String sePattern){
    try {
        format = new SimpleDateFormat("yyyy"+sePattern+"MM"+sePattern+"dd");
        Calendar c = Calendar.getInstance();c.setTime(format.parse(pTime));
        int dayForWeek = 0;
        if(c.get(Calendar.DAY_OF_WEEK) == 1){
            dayForWeek = 7;
        }else{
            dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
        }
        return dayForWeek;
    } catch (ParseException e) {
        e.printStackTrace();
        return 0;
    }
}

public static Map<Integer, List<Date>> getDateMap(List<Date> dates, String sePattern) {
    format = new SimpleDateFormat("yyyy" + sePattern + "MM" + sePattern + "dd");
    Map<Integer, List<Date>> map = new HashMap<Integer, List<Date>>();
    List<Date> dateTempl = null;
   // boolean flag = false;
    if (dates != null) {
        for (int i = 0; i < dates.size(); i++) {
            String dstring = format.format(dates.get(i));
            if (dayForWeek(dstring, sePattern) == 6) {
                dateTempl = new ArrayList<Date>();
                dateTempl.add(dates.get(i));
                map.put(i, dateTempl);
             //   flag = true;
            } else if (dayForWeek(dstring, sePattern) == 7) {
                dateTempl.add(dates.get(i));
            } else if (dayForWeek(dstring, sePattern) == 1) {
                dateTempl = new ArrayList<Date>();
                dateTempl.add(dates.get(i));
                map.put(i, dateTempl);
               // flag = true;
            } else if (i == 0) {
                dateTempl = new ArrayList<Date>();
                dateTempl.add(dates.get(i));
                map.put(i, dateTempl);
               // flag = true;
            } else {
                dateTempl.add(dates.get(i));
            }
           // if (flag) {
            //    map.put(i, dateTempl);
           // }
        }
        return map;
    } else {
        return null;
    }
}

public static List<Date> getDateList(String dateFrom, String dateTo, String sePattern){
    format = new SimpleDateFormat("yyyy" + sePattern + "MM" + sePattern + "dd");
    List<Date> listd = new ArrayList<Date>();
    try {
        Calendar cldF = Calendar.getInstance();
        Calendar cldT= Calendar.getInstance();
        cldF.setTime(format.parse(dateFrom));
        cldT.setTime(format.parse(dateTo));

        while(cldF.before(cldT)){
            listd.add(cldF.getTime());
            cldF.add(Calendar.DAY_OF_MONTH, 1);
        }
        listd.add(cldT.getTime());
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return listd;
}

输出换成这个:
for(List ld : ms.values()){
for(Date d : ld){
System.out.print(format.format(d) + " -> ");
}
System.out.println();
}


图片说明

下面再加一个else if 判断最后一个索引如果不是周六周日 就从上一个索引截取到最后

 else if(i == l1.size()-1 && cal.get(Calendar.DAY_OF_WEEK)!=Calendar.SATURDAY && cal.get(Calendar.DAY_OF_WEEK)!=Calendar.SUNDAY){
                 List<Date> subList = l1.subList(j, l1.size());    
                 System.out.println(subList);
             }