从Java中的枚举列表中删除元素

时间:2019-03-27 10:28:59

标签: java enums java-8

我创建了一个枚举,并在其中分配了一些变量。

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"));

但是当我打印时,该元素还没有被删除。如何移除?预先感谢。

5 个答案:

答案 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));