JavaのEnum値を繰り返す

Javaでの列挙値の繰り返し

1. 概要

JavaのEnumは、事前定義された定数のセットを変数に割り当てるのに役立つデータ型です。

この簡単な記事では、JavaでEnumを反復処理するさまざまな方法を紹介します。

2. Enum値の反復

最初に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());

もう1つ、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 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()メソッドがJava 8のIterableインターフェースに追加されました。 したがって、すべてのJavaコレクションクラスにはforEach()メソッドの実装があります。 これらを列挙で使用するには、まず列挙を適切なコレクションに変換する必要があります。 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. Enum値のArrayListを使用する

Enumの値をListに追加することもできます。 これにより、他のようにListを操作できます。

List 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 days = Arrays.asList(DaysOfWeekEnum.values());
days.remove(0);

3. 結論

JavaでforEach,Streamおよびforループを使用してEnumを反復処理するさまざまな方法を見てきました。 並列操作を実行する必要がある場合は、Streamが適切なオプションです。

それ以外の場合、使用する方法に制限はありません。

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