gpt4 book ai didi

java - 使用枚举/按位将 DaysOfWeek 作为单个整数存储在 sqlite 数据库中 - Java

转载 作者:行者123 更新时间:2023-11-29 06:35:12 24 4
gpt4 key购买 nike

这就是我想要做的。我有一个每周包含多天的字段。 (例如,它可以存储 MONDAY 或 MONDAY | TUESDAY,或 WEDNESDAY | FRIDAY)——基本上是任何组合。

为此,我使用了 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。我以为我可以将其转换为 (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 EnumSet<DayOfWeek> valueToSet(int value) {
EnumSet<DayOfWeek> days = EnumSet.noneOf(DayOfWeek.class);
for (DayOfWeek day : EnumSet.allOf(DayOfWeek.class)) {
if ((value & day.value()) != 0) {
days.add(day);
}
}
return days;
}

关于java - 使用枚举/按位将 DaysOfWeek 作为单个整数存储在 sqlite 数据库中 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com