鉴于选择了星期几,我需要知道特定日期是否与选择匹配。
例如,给定:
enum DayOfWeek {
MON, TUE, WED, THU, FRI, SAT, SUN
}
以及以下选择:
List<DayOfWeek> selection = List.of(MON, WED);
[如果给定的星期几是MON
或WED
,则它应该匹配,否则不匹配。
一种简单的方法:
boolean match = selection.contains(day.getDayOfWeek());
我想知道是否有一种方法可以在选择范围之外构建掩码,并确定给定的日期是否仅与基本运算符(+ - * / % AND OR NOT EQ LT LTE GT GTE
,不允许按位运算符)匹配。
例如,考虑到相同的选择:
int mask = 1010000; // just an example of a mask, can be any other
然后:
boolean match = fn(mask, day.getDayOfWeek());
是否存在这样的mask
,使得fn
只能用基本运算符写?
PS:不确定Stack Overflow是解决此问题的最佳网络,如果您认为它更适合,请毫不犹豫地提出另一个Stack Exchange网络。
代替布尔方法,取一些质数
MON, TUE, WED, THU, FRI, SAT, SUN
2, 3, 5, 7, 11, 13, 17
面具由所选日期的乘积组成,例如(MON, WED) -> 2*5 = 10
dayOfWeek匹配,如果它划分了掩码(同义mask % dayOfWeek === 0
),则其匹配
例如
TUE -> 3, mask % 3 != 0
,不在选择中MON -> 2, mask % 2 === 0
,在选择中