我创建了一个枚举,并在其中分配了一些变量。
public class User{
// few attributes, constructors , getters, setters
public enum Role{
USER,
DEPARTMENT_HEAD,
COMPANY_ADMIN,
SYSTEM_ADMIN,
MANAGER;
}
}
如果条件为真,我需要删除一个变量。
// getting all attributes inside list
List<Role> roles=new ArrayList<Role>(new User().getRoles());
// try to remove
roles.removeIf(p -> p.equals("SYSTEM_ADMIN"));
但是当我打印时,该元素还没有被删除。如何移除?预先感谢。
答案 0 :(得分:2)
这是因为您正在将其与KeyError Traceback (most recent call last)
~/anaconda3/envs/tesnorenv/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2655 try:
-> 2656 return self._engine.get_loc(key)
2657 except KeyError:
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'Wind'
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'Wind'
进行比较而不是枚举。这样就可以了:
String
答案 1 :(得分:2)
您还可以使用静态方法参考:
roles.removeIf(Role.SYSTEM_ADMIN::equals);
@Cascader指出,可以使用EnumSet代替ArrayList。将相同的角色两次分配给用户是没有用的。 Set
接口的协定可以防止这种情况。
答案 2 :(得分:2)
如果要与String进行比较,只需使用IBPP::Database db = IBPP::DatabaseFactory(g_szServerName,
g_szDBName,
g_szUserName,
g_szPassword);
db->Connect();
IBPP::Transaction tr = IBPP::TransactionFactory(db);
tr->Start();
IBPP::Statement st = IBPP::StatementFactory(db, tr);
st->Execute("SELECT * FROM TABLENAME");
while (st->Fetch()){
string rno, emp;
st->Get("RNO", rno);
st->Get("EMP", emp);
cout << "RNO:" << rno << " EMP:" << emp << endl;
}
tr->Commit();
.name()
答案 3 :(得分:1)
您可以尝试像底
roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));
答案 4 :(得分:1)
那是因为您正在与字符串"SYSTEM_ADMIN"
而不是枚举进行比较。进行如下更改即可
roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));