【Java】enumでキーからメッセージを取得する
用途
DBには0, 1, 2...みたいに数値で入っているけど画面にはそれぞれの値に対応した文字列を表示したい時ってあるでしょう。
そんな時にenumを使っていい感じにキー値から対応する文字列を取得する方法を記載します。
コード
CodeBase.java
public interface CodeBase { public Short getKey(); public String getMessage(); }
CodeDifinition.java
public class CodeDifinition { public static <T extends Enum<T> & CodeBase> Optional<T> of(Short key, Class<T> enumClass) { return Optional.ofNullable(Stream.of(enumClass.getEnumConstants()) .filter(enums -> enums.getKey() == key) .findFirst() .orElse(null)); } public static <T extends Enum<T> & CodeBase> String toCodeMessage(Optional<T> type) { return type.isPresent() ? type.get().getMessage() : "unknown"; } }
Fruits.java
public enum Fruits implements CodeBase { APPLE((short) 0, "りんご"), ORANGE((short) 1, "オレンジ"), LEMON((short) 2, "レモン"); private Short key; private String message; private Fruits(Short key, String message) { this.key = key; this.message = message; } @Override public Short getKey() { return key; } @Override public String getMessage() { return message; } public static Optional<Fruits> of(Short key) { return CodeDifinition.of(key, Fruits.class); } public static String toMessage(Short key) { final Optional<Fruits> type = Fruits.of(key); return CodeDifinition.toCodeMessage(type); } }
Execute.java
public class Execute { public static void main(String[] args) { final Short num0 = 0; final Short num1 = 1; final Short num2 = 2; final Short num3 = 3; final List<Short> numList = Arrays.asList(num0, num1, num2, num3); final List<String> messageList = numList.stream() .map(num -> Fruits.toMessage(num)) .collect(Collectors.toList()); messageList.forEach(System.out::println); } }
出力結果
りんご オレンジ レモン unknown
他にいい方法あれば教えて頂きたいです。
おわり