Java如何获取未来n个每月前三个周五并实现对应过滤方法
实现方案
下面提供两种可直接使用的实现,效果完全符合你的需求:
方案1:极简原生实现(性能最优,无需依赖现有工具方法)
import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.ChronoField; public static boolean is1st2ndOr3rdFriday(LocalDate d) { // 非周五直接返回false,方法通用性更强 if (d.getDayOfWeek() != DayOfWeek.FRIDAY) { return false; } // 直接获取当前日期是当月的第几个对应周几,取值范围1~5 int dayOfWeekInMonth = d.get(ChronoField.DAY_OF_WEEK_IN_MONTH); return dayOfWeekInMonth <= 3; }
方案2:复用你已有的nthFridayOfMonth实现
如果你需要复用现有工具方法逻辑,可采用如下写法:
import java.time.DayOfWeek; import java.time.LocalDate; public static boolean is1st2ndOr3rdFriday(LocalDate d) { // 非周五直接返回false,方法通用性更强 if (d.getDayOfWeek() != DayOfWeek.FRIDAY) { return false; } // 判断当前日期是否匹配当月前三个周五中的任意一个 return d.equals(nthFridayOfMonth(d, 1)) || d.equals(nthFridayOfMonth(d, 2)) || d.equals(nthFridayOfMonth(d, 3)); }
上述任意一种方法放入你的Stream过滤逻辑中,都可以得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者wannaBeDev
相关产品推荐
相关产品推荐

