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