Получить массив значений Enum за вычетом указанного элемента - PullRequest
0 голосов
/ 02 мая 2018

У меня есть следующее перечисление:

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

Я могу получить все значения перечисления в массиве следующим образом:

Actions[] all = Actions.values();

Я бы хотел получить массив значений за вычетом указанного значения, например, исключая ф. Я думаю, что-то вроде этого должно делать то, что мне нужно, но я не могу правильно использовать:

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

Я бы хотел однострочное решение, подобное методу, который я пробую, если это возможно. Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вы можете использовать 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]);

Я думаю, что это намного удобнее для чтения, чем использование потока, как вы.

0 голосов
/ 02 мая 2018

Вам нужно что-то вроде этого

Actions[] noF = Arrays.stream( Actions.values() )
        .filter( value -> value != Actions.f )
        .toArray(Actions[]::new);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...