计算 Java 中的债券数量与价值
Calculating number bonds to value in Java
作为我的应用程序的一部分,数据库将“徽章”存储在数据库中的用户记录中。我使用按位运算符,因为(据我所知)没有两个它们的加法可以有相同的解决方案。以下是值:
enum Badge {
SUPPORTER(1),
ALPHA(1 << 1),
BETA_OWNER(1 << 2),
BOOSTER(1 << 3),
ONE_MONTH(1 << 4),
THREE_MONTH(1 << 5),
SIX_MONTH(1 << 6),
ONE_YEAR(1 << 7),
TWO_YEAR(1 << 8),
;
public int value;
public int resolve() {
return value;
}
Badge(int i) {
value = i;
}
}
存储它们的方法很简单,只需将每个徽章对应的用户的值相加即可。然而,解码这个值更棘手。
我如何将数据库中的值解码为我可以操作的徽章列表?
使用 EnumSet
.The EnumSet can hold each item only once (it's a set). Have a look here 在数据库中存储值。有手动解码的解决方案,或者您可以为此使用 Apache Commons。
让我们尝试这样的事情:
public enum BADGES {SUPPORTER, ALPHA, BETA_OWNER, BOOSTER, ONE_MONTH, THREE_MONTH, SIX_MONTH, ONE_YEAR, TWO_YEAR};
public HashMap<BADGES, Integer> badgesToIntegerMap = /* initialize map where integers are mapped to badges */
public HashMap<Integer, BADGES> integerToBadgesMap = /* initialize map where badges are mapped to their integers */
public List<BADGES> getUserBadges(int userStatus) {
List<BADGES> retVal = new ArrayList<BADGES>();
// Start from highest one, being TWO_YEAR at time of writing
int currentBadge = 1 << 8; //
while (currentBadge > 0) { // These two should be replaced by iterating the badgesToIntegerMap's values
if (userStatus && currentBadge == 1) {
retVal.add(integerToBadgesMap.get(currentBadge));
}
currentBadge = currentBadge >> 1;
}
return retVal;
}
或者您知道,只需将这些整数传递到每个徽章的构造函数中,就可以避免一次查找。
作为我的应用程序的一部分,数据库将“徽章”存储在数据库中的用户记录中。我使用按位运算符,因为(据我所知)没有两个它们的加法可以有相同的解决方案。以下是值:
enum Badge {
SUPPORTER(1),
ALPHA(1 << 1),
BETA_OWNER(1 << 2),
BOOSTER(1 << 3),
ONE_MONTH(1 << 4),
THREE_MONTH(1 << 5),
SIX_MONTH(1 << 6),
ONE_YEAR(1 << 7),
TWO_YEAR(1 << 8),
;
public int value;
public int resolve() {
return value;
}
Badge(int i) {
value = i;
}
}
存储它们的方法很简单,只需将每个徽章对应的用户的值相加即可。然而,解码这个值更棘手。
我如何将数据库中的值解码为我可以操作的徽章列表?
使用 EnumSet
.The EnumSet can hold each item only once (it's a set). Have a look here 在数据库中存储值。有手动解码的解决方案,或者您可以为此使用 Apache Commons。
让我们尝试这样的事情:
public enum BADGES {SUPPORTER, ALPHA, BETA_OWNER, BOOSTER, ONE_MONTH, THREE_MONTH, SIX_MONTH, ONE_YEAR, TWO_YEAR};
public HashMap<BADGES, Integer> badgesToIntegerMap = /* initialize map where integers are mapped to badges */
public HashMap<Integer, BADGES> integerToBadgesMap = /* initialize map where badges are mapped to their integers */
public List<BADGES> getUserBadges(int userStatus) {
List<BADGES> retVal = new ArrayList<BADGES>();
// Start from highest one, being TWO_YEAR at time of writing
int currentBadge = 1 << 8; //
while (currentBadge > 0) { // These two should be replaced by iterating the badgesToIntegerMap's values
if (userStatus && currentBadge == 1) {
retVal.add(integerToBadgesMap.get(currentBadge));
}
currentBadge = currentBadge >> 1;
}
return retVal;
}
或者您知道,只需将这些整数传递到每个徽章的构造函数中,就可以避免一次查找。