Bài viết hôm nay, mình giới thiệu các bạn cách Tạo danh sách ngày từ 2 ngày cho trước bằng Stream trong Java.
Stream là gì?
Kể từ Java 8, chúng ta được giới thiệu tới một tính năng là Stream API nằm trong gói java.util.stream.
Stream (luồng) là một đối tượng mới của Java được giới thiệu từ phiên bản Java 8, giúp cho việc thao tác trên Collection và Array trở nên dễ dàng và tối ưu hơn. Chúng ta có thể thực hiện các phép toán tổng hợp khác nhau trên dữ liệu được trả về từ các collection, array, hay các hoạt động Input/Output.
Một Stream đại diện cho một chuỗi các phần tử hỗ trợ các hoạt động tổng hợp tuần tự (sequential) và song song (parallel).
Cách sử dụng Stream các bạn tìm hiểu ở các bài viết khác nhé.
Tạo danh sách ngày từ 2 ngày cho trước bằng Stream
Bài toán thứ nhất
Chúng ta đang có một yêu cầu cần phải tạo ra danh sách các ngày từ 2 ngày cho trước.
Ví dụ: Ngày bắt đầu: 2021/01/01 , ngày kết thúc 2021/01/05
Danh sách ngày cần tạo: [2021/01/01, 2021/01/02, 2021/01/03, 2021/01/04, 2021/01/05]
Code Java:
1 2 3 4 5 6 7 |
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); LocalDate startDate = LocalDate.parse("2021/01/01", formatter); LocalDate endDate = LocalDate.parse("2021/01/05", formatter); List<LocalDate> dateList = Stream.iterate(startDate, d -> d.plusDays(1)) .limit(ChronoUnit.DAYS.between(startDate, endDate.plusDays(1))) .collect(Collectors.toList()); |
Bài toán thứ hai
Chúng ta đang có một yêu cầu cần phải tạo ra danh sách các ngày từ 2 ngày cho trước. Mỗi một phần tử cách nhau 2 tháng.
Ví dụ: Ngày bắt đầu: 2021/01/01 , ngày kết thúc 2021/05/01
Danh sách ngày cần tạo: [2021/01/01, 2021/03/01, 2021/05/01]
Code Java:
1 2 3 4 5 6 7 8 9 10 |
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); LocalDate startDate = LocalDate.parse("2021/01/01", formatter); LocalDate endDate = LocalDate.parse("2021/05/01", formatter); long numOfMonths = ChronoUnit.MONTHS.between(startDate, endDate.plusMonths(1)); long totalBimonthlyDates = (long) Math.ceil((double) numOfMonths/2); List<LocalDate> dateList = Stream.iterate(startDate, d -> d.plusMonths(2)) .limit(totalBimonthlyDates) .collect(Collectors.toList()); |
Như vậy là chúng ta đã biết cách Tạo danh sách ngày từ 2 ngày cho trước bằng Stream trong Java.
Chúng ta sẽ cùng tìm hiểu các ứng dụng khác của Stream ở những bài viết tiếp theo nhé!
Leave a Reply