我们有一个需求,一个日期集合,连续的放在一组。
源代码:
Long toEpochMilli(String date) {
return LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
String toDate(Long value) {
java.util.Date d = Date.from(Instant.ofEpochMilli(value));
return new SimpleDateFormat("yyyy-MM-dd").format(d);
}
@Test
public void continuousTest() {
//int[] srcArray = new int[]{1, 3, 4, 5, 6, 7, 8, 12, 13, 14};
List<String> origins = Arrays.asList("2023-01-01", "2023-01-04", "2023-01-05", "2023-01-06", "2023-01-31", "2023-02-01", "2023-02-02");
List<Long> time = origins.stream().map(each -> toEpochMilli(each)).collect(Collectors.toList());
Long[] srcArray = time.toArray(new Long[0]);
List<List<String>> allList = new ArrayList<>();
//List<List<String>> dateList = new ArrayList<>();
for (int i = 0; i < srcArray.length; i++) {
List<String> tmpList = new ArrayList<>();
for (int j = i; j < srcArray.length; j++) {
tmpList.add(toDate(srcArray[j]));
if (j + 1 == srcArray.length || srcArray[j + 1] - srcArray[j] != 86400000) {
allList.add(tmpList);
i = j;
break;
}
}
}
System.out.println(allList);
}
Console
[[2023-01-01], [2023-01-04, 2023-01-05, 2023-01-06], [2023-01-31, 2023-02-01, 2023-02-02]]