从一周中的几天 (MTWTFSS) 中构建掩码,以仅通过基本运算符查找特定日期是否匹配

Building a mask out of a selection of days of week (MTWTFSS) to find whether a specific day matches via basic operators only

给定星期几的选择,我需要知道特定的一天是否与选择匹配。

例如,给定:

enum DayOfWeek {
    MON, TUE, WED, THU, FRI, SAT, SUN
}

以及以下选择:

List<DayOfWeek> selection = List.of(MON, WED);

如果给定的星期几是 MONWED,则它应该匹配,否则不应该匹配。

一个简单的方法:

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 可以只用基本运算符编写?

取一些素数而不是布尔方法

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, 入选中