Macでパスワード付きZIPファイルを作成!圧縮・解凍できない、開けない問題を解決!
野田竣介
フェルメール株式会社
今回はこのような質問をいただきました。
Enumをループさせたい!
Enumって慣れるまで少し難しいですよね。
そこで今回はこちらの質問について解説していきます!
Enumは定数をまとめたclassです。
列挙型と呼ばれますね。
読み方は「いーなむ」、「いなむ」、「えなむ」などなど…
いくつかの定数をまとめて保持したい場合に使います。
例えば、服のサイズを扱うときはS, M, L, XLなんかをEnumで定義するのが良いですね。
では実際にEnumを定義してループをまわしてみましょう!
まずは今回利用するEnumを定義します。
先ほどの例のようにサイズのEnumを作ってみました。
このSize.javaで定義したEnumをループさせてみたいと思います。
// Size.java
/**
* サイズ
*/
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;
}
}
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文を使った場合より少し複雑になってしまいますね。
自分が使いやすいと思うほうを使ってみましょう!