こんばんは!ヒカリです。
Webエンジニアを目指してプログラミングを勉強している初心者の方向けに情報を発信しています。
今流行の仮想通貨を自動売買してみました!
リモートワークでおすすめのグッズ紹介してみました!
今回はこのような質問をいただきました。
Enumをループさせたい!
Enumって慣れるまで少し難しいですよね。
そこで今回はこちらの質問について解説していきます!
Enumって何?
Enumは定数をまとめたclassです。
列挙型と呼ばれますね。
読み方は「いーなむ」、「いなむ」、「えなむ」などなど…
いくつかの定数をまとめて保持したい場合に使います。
例えば、服のサイズを扱うときはS, M, L, XLなんかをEnumで定義するのが良いですね。
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()ですべての定数を取得してその値をループさせます。
シンプルでわかりやすい!
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 (Size size : Size.values()) {
System.out.println(
String.format(
"身長が%scm〜%scmの人には%sがオススメ",
size.getMin(), size.getMax(), size.toString()
)
);
}
ラムダを使う場合はこんな感じ。
Arrays.stream(Size.values()).collect(Collectors.toList()).forEach(size -> {
System.out.println(
String.format(
"身長が%scm〜%scmの人には%sがオススメ",
size.getMin(), size.getMax(), size.toString()
)
);
});
どちらもやっていることは同じです!
あとがき
拡張for文、ラムダどちらを使ってもスマートですね!
個人的にはあまりfor文を書きたくないのでラムダのほうが好きです。
ただ、拡張for文を使った場合より少し複雑になってしまいますね。
自分が使いやすいと思うほうを使ってみましょう!