← Назад к вопросам

Как получить список всех значений перечисления Enum?

1.0 Junior🔥 141 комментариев
#ООП#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Получение всех значений перечисления Enum

Перечисление (Enum) в Java — это специальный тип данных, который позволяет определить набор константных значений. Для получения списка всех значений перечисления существует встроенный метод values(), который автоматически генерируется для каждого Enum класса.

Основной метод: values()

Это самый простой и рекомендуемый способ получить массив всех значений перечисления:

public enum Color {
    RED("#FF0000"),
    GREEN("#00FF00"),
    BLUE("#0000FF"),
    YELLOW("#FFFF00");

    private final String hexCode;

    Color(String hexCode) {
        this.hexCode = hexCode;
    }

    public String getHexCode() {
        return hexCode;
    }
}

// Получение всех значений
public class EnumExample {
    public static void main(String[] args) {
        // values() возвращает массив всех констант
        Color[] allColors = Color.values();
        
        // Итерация по всем значениям
        for (Color color : allColors) {
            System.out.println(color + ": " + color.getHexCode());
        }
        // Вывод:
        // RED: #FF0000
        // GREEN: #00FF00
        // BLUE: #0000FF
        // YELLOW: #FFFF00
    }
}

Альтернативные подходы

EnumSet для работы с коллекциями:

Если нужна коллекция вместо массива, используй EnumSet:

public class EnumSetExample {
    public static void main(String[] args) {
        // Получить все значения как Set
        Set<Color> allColors = EnumSet.allOf(Color.class);
        
        for (Color color : allColors) {
            System.out.println(color);
        }
    }
}

Поток для обработки:

Для современного подхода с использованием Stream API:

public class EnumStreamExample {
    public static void main(String[] args) {
        // Получить поток всех значений
        Arrays.stream(Color.values())
              .forEach(color -> System.out.println(color + ": " + color.getHexCode()));
        
        // Фильтрация и обработка
        List<Color> warmColors = Arrays.stream(Color.values())
                                       .filter(color -> color == Color.RED || color == Color.YELLOW)
                                       .collect(Collectors.toList());
    }
}

Особенности и рекомендации

  • values() — самый эффективный способ, работает O(1)
  • Метод values() генерируется компилятором автоматически
  • Массив всегда в порядке объявления констант в Enum
  • EnumSet занимает меньше памяти, чем HashSet
  • EnumMap эффективнее HashMap для ключей-Enum
  • Избегай вызова values() в цикле — кэшируй результат

Правильное использование в production

public class EnumRepository {
    private static final Color[] COLORS_CACHE = Color.values();
    
    public static List<Color> getAllColors() {
        return Arrays.asList(COLORS_CACHE);
    }
    
    public static Map<Color, String> getColorMap() {
        return Arrays.stream(Color.values())
                    .collect(Collectors.toMap(
                        color -> color,
                        Color::getHexCode
                    ));
    }
}

Этот подход оптимален по производительности и памяти.