Javaで列挙値を反復処理する
1. 概要
Javaでは、 Enum は、事前定義された定数のセットを変数に割り当てるのに役立つデータ型です。
このクイックチュートリアルでは、Javaの列挙型を反復処理するさまざまな方法を学習します。
2. 列挙型値の反復
最初にEnumを定義して、いくつかの簡単なコード例を作成しましょう。
public enum DaysOfWeekEnum {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
列挙型には、 forEach()や iterator()のような反復のメソッドがありません。 代わりに、 values()メソッドによって返されるEnum値の配列を使用できます。
2.1. forループを使用して反復します
まず、昔ながらのforループを使用するだけです。
for (DaysOfWeekEnum day : DaysOfWeekEnum.values()) {
System.out.println(day);
}
2.2. Streamを使用して反復します
java .util.Stream を使用して、Enum値の操作を実行することもできます。
Stream、を作成するには、2つのオプションがあります。 1つ目は、Stream.ofを使用することです。
Stream.of(DaysOfWeekEnum.values());
2つ目は、Arrays.streamの使用です。
Arrays.stream(DaysOfWeekEnum.values());
DaysOfWeekEnum クラスを拡張して、Streamを使用して例を作成しましょう。
public enum DaysOfWeekEnum {
SUNDAY("off"),
MONDAY("working"),
TUESDAY("working"),
WEDNESDAY("working"),
THURSDAY("working"),
FRIDAY("working"),
SATURDAY("off");
private String typeOfDay;
DaysOfWeekEnum(String typeOfDay) {
this.typeOfDay = typeOfDay;
}
// standard getters and setters
public static Stream<DaysOfWeekEnum> stream() {
return Stream.of(DaysOfWeekEnum.values());
}
}
次に、非稼働日を印刷するための例を記述します。
public class EnumStreamExample {
public static void main() {
DaysOfWeekEnum.stream()
.filter(d -> d.getTypeOfDay().equals("off"))
.forEach(System.out::println);
}
}
これを実行すると得られる出力は次のとおりです。
SUNDAY
SATURDAY
2.3. forEach()を使用して反復します
forEach()メソッドがJava8のIterableインターフェイスに追加されました。 したがって、すべてのJavaコレクションクラスには、 forEach()メソッドの実装があります。 これらをEnumで使用するには、最初にEnumを適切なコレクションに変換する必要があります。 Arrays.asList()を使用して ArrayList、を生成し、 forEach()メソッドを使用してループすることができます。
Arrays.asList(DaysOfWeekEnum.values())
.forEach(day -> System.out.println(day));
2.4. EnumSetを使用して反復します
EnumSet は、Enumタイプで使用できる特殊なセット実装です。
EnumSet.allOf(DaysOfWeekEnum.class)
.forEach(day -> System.out.println(day));
2.5. 列挙型値のArrayListを使用する
Enumの値をListに追加することもできます。 これにより、リストを他の方法と同じように操作できます。
List<DaysOfWeekEnum> days = new ArrayList<>();
days.add(DaysOfWeekEnum.FRIDAY);
days.add(DaysOfWeekEnum.SATURDAY);
days.add(DaysOfWeekEnum.SUNDAY);
for (DaysOfWeekEnum day : days) {
System.out.println(day);
}
days.remove(DaysOfWeekEnum.SATURDAY);
if (!days.contains(DaysOfWeekEnum.SATURDAY)) {
System.out.println("Saturday is no longer in the list");
}
for (DaysOfWeekEnum day : days) {
System.out.println(day);
}
Arrays.asList()を使用して、ArrayListを作成することもできます。
ただし、ArrayListはEnum値の配列に支えられているため、不変であるため、Listからアイテムを追加または削除することはできません。次のコードの削除は、UnsupportedOperationExceptionで失敗します。
List<DaysOfWeekEnum> days = Arrays.asList(DaysOfWeekEnum.values());
days.remove(0);
3. 結論
この記事では、 forEach、 Stream 、およびJavaの for ループを使用して、Enumを反復処理するさまざまな方法について説明しました。 。
並列操作を実行する必要がある場合は、Streamが適切なオプションです。 それ以外の場合は、使用する方法に制限はありません。
いつものように、ここで説明されているすべての例のコードは、GitHubのにあります。