Получить массив значений Enum за вычетом указанного элемента

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

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

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

Actions[] all = Actions.values();

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

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

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

Вам нужно использовать toArray(Actions[]::new), чтобы получить правильный тип массива.

daniu 02.05.2018 13:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

Это тоже здорово, Марк. Его конец, который должен быть правильным ответом. Извини, но я пошел с Дебмаля

Steve W 02.05.2018 14:17

@SteveW Нет проблем, я просто хотел предоставить альтернативу: просто потому, что вы можете делать что-то с потоком, не означает, что вам нужно (или нужно) их использовать;)

Mark Rotteveel 02.05.2018 14:20

Другие вопросы по теме