获取枚举值数组较少的指定项

时间:2018-05-02 11:54:01

标签: java arrays enums

我有一个枚举如下:

private enum Actions {
    f, 
    c,  
    r, 
    a 
}

我可以像这样得到数组中的所有枚举值:

Actions[] all = Actions.values();

我希望能够将值数组减去指定值,例如不包括f。我认为这样的事情应该做我需要的但我无法正确使用:

Actions[] noF = Arrays.stream( Actions.values() )
        .filter( value -> value != Actions.f )
        .toArray();

我想要一个单行解决方案,就像我正在尝试的方法一样。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

你需要这样的东西

Actions[] noF = Arrays.stream( Actions.values() )
        .filter( value -> value != Actions.f )
        .toArray(Actions[]::new);

答案 1 :(得分:1)

您可以使用EnumSet来完成工作:

Set<Actions> exceptF = EnumSet.complementOf(EnumSet.of(Actions.f));

// Object array
Object[] exceptFObjectArray = exceptF.toArray();

// or Actions array
Actions[] exceptFActionsArray = exceptF.toArray(new Actions[0]);

或者一气呵成:

Actions[] exceptF = EnumSet.complementOf(EnumSet.of(Actions.f))
        .toArray(new Actions[0]);

我认为这比使用像你这样的流更具可读性。