若List中有连续的日期则将首尾设置为startDate、endDate,否则startDate=endDate=独立的日期
1 //初始化list,且该list中的日期是升序的。 2 List<String> list = Arrays.asList("2020-11-19","2020-11-20","2020-11-21","2021-07-20"); 3 List arrayList = new ArrayList<>(); 4 int num = 0; 5 for (int i=0;i<list.size();i=num){ 6 String start = list.get(i); 7 String end = ""; 8 if (i==list.size()-1){ 9 end = start; 10 } 11 int n = 0; 12 for (int j=i+1;j<list.size();j++){ 13 //判断当前日期的后一天与list中该元素的下一个元素是否相等 14 if(getSpecifiedDayAfter(list.get(j-1)).equals(list.get(j))){ 15 end = list.get(j); 16 n++; 17 num++; 18 continue; 19 }else { 20 //list中该元素不是连续的 21 if (n==0){ 22 end = list.get(j-1); 23 } 24 break; 25 } 26 } 27 num = num+1; 28 HashMap<String, String> map = new HashMap<>(); 29 map.put("startDate",start); 30 map.put("endDate",end); 31 arrayList.add(map); 32 }
1 /** 2 * 获取当前日期的后一天 3 * @param specifiedDay 4 * @return 5 */ 6 public static String getSpecifiedDayAfter(String specifiedDay) { 7 Calendar c = Calendar.getInstance(); 8 Date date = null; 9 try { 10 date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay); 11 } catch (ParseException e) { 12 e.printStackTrace(); 13 } 14 c.setTime(date); 15 int day = c.get(Calendar.DATE); 16 c.set(Calendar.DATE, day + 1); 17 String dayAfter = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); 18 return dayAfter; 19 }
运行结果-》[{endDate=2020-11-21, startDate=2020-11-19}, {endDate=2021-07-20, startDate=2021-07-20}]