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を作成することもできます。

ただし、ArrayListEnum値の配列に支えられているため、不変であるため、Listからアイテムを追加または削除することはできません。次のコードの削除は、UnsupportedOperationExceptionで失敗します。

List<DaysOfWeekEnum> days = Arrays.asList(DaysOfWeekEnum.values());
days.remove(0);

3. 結論

この記事では、 forEach、 Stream 、およびJavaの for ループを使用して、Enumを反復処理するさまざまな方法について説明しました。 。

並列操作を実行する必要がある場合は、Streamが適切なオプションです。 それ以外の場合は、使用する方法に制限はありません。

いつものように、ここで説明されているすべての例のコードは、GitHubにあります。