6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StreamAPI を使って enum に contains 的判定メソッドを実装してみた

Last updated at Posted at 2022-02-20

はじめに

Javaでenumを利用する際、メンバ変数を宣言することが可能ですが、
指定した文字列や値、インスタンスが含まれているか? という

のようなメソッドはEnumにおいて自前で実装する必要があります。
実装自体は難しくないですが、調べても意外と出てこなかったため備忘録として残します。

今回利用するenum

enum
    public static enum Department {
        SALES("1","営業部"),
        PERSONNAL("2","人事部"),
        DEVELOPMENT("3","開発部");

        private final String departmentCode;
        private final String departmentName;
        
        Department(String departmentCode, String departmentName){
            this.departmentCode = departmentCode;
            this.departmentName = departmentName;
        }
        public String getDepartmentCode() {
            return departmentCode;
        }
        public String getDepartmentName() {
            return departmentName;
        }
    }

やりたいことのイメージ

Map型変数で利用できるcontainsKeyメソッドやcontainsValueメソッドをenumで再現したい

public static final Map<String, String> DEPARTMENT_MAP = new HashMap<>();
    static {
        DEPARTMENT_MAP.put("1","営業部");
        DEPARTMENT_MAP.put("2","人事部");
        DEPARTMENT_MAP.put("3","開発部");
    }
        
    public static void main(String[] args) {

        System.out.println("----[HashMap]containsKeyメソッド確認!!----");
        System.out.println("1 は" + (DEPARTMENT_MAP.containsKey("1") ? "含まれている" : "含まれていない"));
        System.out.println("4 は" + (DEPARTMENT_MAP.containsKey("4") ? "含まれている" : "含まれていない"));
        
        System.out.println("----[HashMap]containsValueメソッド確認!!----");
        System.out.println("営業部 は" + (DEPARTMENT_MAP.containsValue("営業部") ? "含まれている" : "含まれていない"));
        System.out.println("マーケティング部 は" + (DEPARTMENT_MAP.containsValue("マーケティング部") ? "含まれている" : "含まれていない"));
        
    }
}

実現方法

実装内容は次の通りです。

public static boolean containsKey(String target) {
        return Arrays.stream(Department.values())
           .anyMatch(r -> r.getDepartmentCode().equals(target));
}

Point

  • valuesメソッドでenumを配列で返却
  • Arrays.streamメソッドで配列をStreamに変換
  • anyMatchメソッドで引数の値に一致するメンバ変数があればtrueを返却

※containsValueの説明に関しては参照するメンバ変数が異なるのみのため、割愛

実行例

public class Main {

    public static enum Department {
        SALES("1","営業部"),
        PERSONNAL("2","人事部"),
        DEVELOPMENT("3","開発部");
        private final String departmentCode;
        private final String departmentName;
        
        Department(String key, String value){
            this.departmentCode = key;
            this.departmentName = value;
        }
        public String getDepartmentCode() {
            return departmentCode;
        }
        public String getDepartmentName() {
            return departmentName;
        }
        public static boolean containsKey(String target) {
            return Arrays.stream(Department.values()).anyMatch(r -> r.getDepartmentCode().equals(target));
        }
           public static boolean containsValue(String target) {
            return Arrays.stream(Department.values()).anyMatch(r -> r.getDepartmentName().equals(target));
        }
    }

    public static void main(String[] args) {
        System.out.println("----[enum]containsKeyメソッド確認!!----");
        System.out.println("1 は" + (Department.containsKey("1") ? "含まれている" : "含まれていない"));
        System.out.println("4 は" + (Department.containsKey("4") ? "含まれている" : "含まれていない"));
        
        System.out.println("----[enum]containsValueメソッド確認!!----");
        System.out.println("営業部 は" + (Department.containsValue("営業部") ? "含まれている" : "含まれていない"));
        System.out.println("マーケティング部 は" + (Department.containsValue("マーケティング部") ? "含まれている" : "含まれていない"));
    }
}
実行結果
----[enum]containsKeyメソッド確認!!----
1 は含まれている
4 は含まれていない
----[enum]containsValueメソッド確認!!----
営業部 は含まれている
マーケティング部 は含まれていない
6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?