Цикл for для перебора enum в Java
Я работаю с перечислением (enum
) в Java, которое содержит кардинальные и промежуточные направления:
public enum Direction {
NORTH,
NORTHEAST,
EAST,
SOUTHEAST,
SOUTH,
SOUTHWEST,
WEST,
NORTHWEST
}
Мне нужно написать цикл for
, который будет перебирает каждое из этих значений перечисления. Как правильно это реализовать?
5 ответ(ов)
Все константы перечисления (enum) можно получить, вызвав неявный метод public static T[] values()
данного типа. Например, для перечисления Direction
это можно сделать следующим образом:
for (Direction d : Direction.values()) {
System.out.println(d);
}
Этот код перебирает все значения перечисления Direction
и выводит их на экран.
Вы можете сделать это следующим образом:
for (Direction direction : EnumSet.allOf(Direction.class)) {
// выполняем необходимые действия
}
Если порядок не имеет значения, то вы можете использовать следующий код:
Set<Direction> directions = EnumSet.allOf(Direction.class);
for (Direction direction : directions) {
// выполняем необходимые действия
}
Этот код создаёт множество всех значений перечисления Direction
с помощью EnumSet.allOf()
, и затем перебирает их в цикле for-each
.
Вы можете использовать стримы в Java 8 для более лаконичного и функционального подхода к перебору значений перечисления (enum). Вот пример с использованием Stream.of
:
Stream.of(Direction.values()).forEach(System.out::println);
Это решение эффективно создает поток из значений перечисления Direction
и применяет forEach
, чтобы вывести каждое значение на консоль.
В Java 5 и выше у вас есть более традиционный for-each
цикл, который выглядит так:
for (Direction d : Direction.values()) {
System.out.println(d);
}
Оба подхода выполняют одну и ту же задачу, но вариант с использованием стримов в Java 8 более современный и может быть лучше интегрирован с остальными функциональными возможностями Java 8, такими как лямбда-выражения и API Stream.
Если у вас есть необходимость в более сложных операциях над элементами, стримы могут предоставить дополнительные возможности для фильтрации, сортировки и преобразования данных.
В Java 8 существует несколько способов работы с перечислениями (enums) с использованием forEach
. Вот два из них:
Использование EnumSet
с forEach
Вы можете использовать EnumSet
для получения всех значений перечисления и затем применить метод forEach
:
EnumSet.allOf(Direction.class).forEach(...);
Этот подход полезен, когда вы хотите работать с имеется всеми значениями перечисления, и он более производителен, чем использование массивов.
Использование Arrays.asList
с forEach
Также можно использовать метод Arrays.asList
в сочетании с forEach
, чтобы перебрать все значения перечисления:
Arrays.asList(Direction.values()).forEach(...);
Этот способ удобен для работы с коллекциями и дает возможность использовать любые другие методы List
, если это необходимо.
Таким образом, оба подхода имеют свои преимущества, и вы можете выбрать тот, который лучше всего подходит для вашей задачи.
Как выйти из вложенных циклов в Java?
Сравнение членов enum в Java: использовать == или equals()?
Как перебрать или перечислить объекты в JavaScript?
Цикл по массиву в JavaScript
Что значит 'synchronized'?