这里就是我想要做的事。 我有一个每周涵盖多天的现场。 (例如,它可以存储或MONDAY MONDAY |星期二,星期三或|星期五) - 基本上任何组合。
要做到这一点我用2的幂,像这样的枚举:
public enum DayOfWeek {
Monday(1),
Tuesday(2),
Wednesday(4),
Thursday(8),
Friday(16),
Saturday(32),
Sunday(64);
private final int index;
DayOfWeek(int index) {
this.index = index;
}
public int value() {
return index;
}
}
然后,我存储在这样的数据库中的一个整数:
DayOfWeek days = DayOfWeek.Monday | DayOfWeek.Thursday; // Monday and Thursday
int daysAsInt = (DayOfWeek)days; // Value to save
我可以测试日内这样
if ((days & DayOfWeek.Monday) == DayOfWeek.Monday) /* If days contains Monday */
我的问题是我不知道怎么去转换回星期几是整数值。 我以为我可以投它(DayOfWeek)daysAsInt
。 但是,这是行不通的。
任何建议将非常赞赏。
您枚举是一周的各天-类型的变量DayOfWeek
只应有望指一天。 如果你想存储多个值,你应该看看一个EnumSet
:
EnumSet<DayOfWeek> days = EnumSet.of(DayOfWeek.Monday, DayOfWeek.Wednesday);
int valueToStore = setToValue(days);
后来:
int valueRetrieved = ...;
EnumSet<DayOfWeek> days = valueToSet(days);
其中这些方法被声明为:
static int setToValue(EnumSet<DayOfWeek> days) {
int value = 0;
for (DayOfWeek day : days) {
value |= day.value();
}
return value;
}
static int valueToSet(int value) {
EnumSet<DayOfWeek> days = EnumSet.noneOf(EnumSet.class);
for (DayOfWeek day : EnumSet.allOf(EnumSet.class)) {
if ((value & day.value()) != 0) {
days.add(day);
}
}
return days;
}
由于整数可能包含多个日子里,你不能只是简单地转换整数回单DayOfWeek
实例,但你必须返回数组/设置/列表DayOfWeek
元素。
要做到这一点,你可以提供一个静态方法, DayOfWeek
,检查INT每个“指数”(这是不是一个真正的索引,而是一个标志/ ID)。
文章来源: Storing DaysOfWeek as single integer in sqlite database using enum/bitwise - Java