从java中的枚举列表中删除元素
我创建了一个枚举,并在那里分配了一些变量从java中的枚举列表中删除元素,java,generics,collections,java-8,java-stream,Java,Generics,Collections,Java 8,Java Stream,我创建了一个枚举,并在那里分配了一些变量 public class User{ // few attributes, constructors , getters, setters public enum Role{ USER, DEPARTMENT_HEAD, COMPANY_ADMIN, SYSTEM_ADMIN, MANAGER; } } 如果条件为真,我需要删除一个变量 // ge
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"));
//获取列表中的所有属性
List roles=new ArrayList(new User().getRoles());
//设法除去
角色移除(p->p.equals(“系统管理”);
但是当我打印时,元素还没有被删除。如何删除?提前感谢。这是因为您将其与
字符串进行比较,而不是与枚举进行比较。这就是工作:
roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));
你可以试试看
roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));
这是因为您使用的是字符串“SYSTEM\u ADMIN”
,而不是enum。像下面这样改变就行了
roles.removeIf(p -> p.equals(Role.SYSTEM_ADMIN));
您还可以使用静态方法引用:
roles.removeIf(Role.SYSTEM_ADMIN::equals);
正如@Cascader所指出的,可以使用EnumSet而不是ArrayList。将同一角色分配给用户两次是没有用的。集合
接口的约定阻止了这种情况。如果要与字符串进行比较,只需使用.name()
既然已经有几个正确的答案,而不是再加上一个,让我添加一个相关的建议:考虑使用而不是<代码> ARARYLISTAB/COD>
roles.removeIf( p -> p.name().equals("SYSTEM_ADMIN"));