我有一个枚举如下:
private enum Actions {
f,
c,
r,
a
}
我可以像这样得到数组中的所有枚举值:
Actions[] all = Actions.values();
我希望能够将值数组减去指定值,例如不包括f。我认为这样的事情应该做我需要的但我无法正确使用:
Actions[] noF = Arrays.stream( Actions.values() )
.filter( value -> value != Actions.f )
.toArray();
我想要一个单行解决方案,就像我正在尝试的方法一样。有人可以帮忙吗?
答案 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]);
我认为这比使用像你这样的流更具可读性。