ふりぶろぐ
Web Engineer's Blog
Java

【Java】Enumのループ

Java

Enumに定義されているすべての値でループ処理を行いたいときの書き方。

Enumとは

定数をまとめたclassです。

列挙型と呼ばれますね。

いくつかの定数をまとめて保持したい場合に使います。

例えば、服のサイズを扱うときはS, M, L, XLなんかをEnumで定義するのが良いですね。

Enumのループ

ここからが本題。

Enumを定義してループをまわしてみます。

Enumの定義

先ほどの例のようにサイズのEnumを作ってみました。

このSize.javaで定義したEnumをループさせてみたいと思います。

/**
 * サイズ
 */
public enum Size {
    S(145, 155),
    M(150, 160),
    L(155, 165),
    XL(155, 165);

    /**
     * 最小身長
     */
    private final int min;

    /**
     * 最大身長
     */
    private final int max;

    Size(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public int getMin() {
        return min;
    }

    public int getMax() {
        return max;
    }
}

拡張for文を使ったループ

values()ですべての定数を取得してその値をループさせます。

シンプルでわかりやすい。

文字列をすべて「+」でつなげたら読みにくかったのでString.format()使ってみました。

for (Size size : Size.values()) {
    System.out.println(
            String.format(
                    "身長が%scm〜%scmの人には%sがオススメ",
                    size.getMin(), size.getMax(), size.toString()
            )
    );
}
結果
身長が145cm〜155cmの人にはSがオススメ
身長が150cm〜160cmの人にはMがオススメ
身長が155cm〜165cmの人にはLがオススメ
身長が155cm〜165cmの人にはXLがオススメ

ラムダを使ったループ

Java8以降であればラムダを使いたい。

個人的にはこっちのほうが好き。

Arrays.stream()で配列からStream型に変換した後に、Collectors.toList()でList型に変換してforEachでループさせます。

Arrays.stream(Size.values()).collect(Collectors.toList()).forEach(size -> {
    System.out.println(
            String.format(
                    "身長が%scm〜%scmの人には%sがオススメ",
                    size.getMin(), size.getMax(), size.toString()
            )
    );
});
結果
身長が145cm〜155cmの人にはSがオススメ
身長が150cm〜160cmの人にはMがオススメ
身長が155cm〜165cmの人にはLがオススメ
身長が155cm〜165cmの人にはXLがオススメ

まとめ

拡張for文、ラムダどちらを使っても良いと思います。

個人的にはあまりfor文を書きたくないのでラムダのほうが好き。

ただ、拡張for文を使った場合より少し複雑になってしまいますね。

自分が使いやすいほうを使いましょう。

ABOUT ME
りーふ
たまにブログを書いてるWebエンジニア。 サーバーサイドメインでインフラとフロントエンドもたまにやります。 Javaが得意。 Play Frameworkが好き。 本業は迷惑をかけない程度に手を抜くスタイル。 意識高い系は苦手。