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を作成することもできます。
ただし、ArrayListはEnum値配列に支えられているため、不変であるため、List.からアイテムを追加または削除することはできません。次のコードの削除は次のコードで失敗します。 UnsupportedOperationException:
List days = Arrays.asList(DaysOfWeekEnum.values());
days.remove(0);
3. 結論
JavaでforEach,Streamおよびforループを使用してEnumを反復処理するさまざまな方法を見てきました。 並列操作を実行する必要がある場合は、Streamが適切なオプションです。
それ以外の場合、使用する方法に制限はありません。
いつものように、ここで説明されているすべての例のコードはover on GitHubにあります。