【Java】enumでcontainsメソッドっぽく指定した値が存在するか判定する

# はじめに

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


 * **Collectionクラスのcontainsメソッド**　
 * **MapクラスのcontainsKey/containsValueメソッド**

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

# 今回利用するenum
```Java: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で再現したい
```Java
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("マーケティング部") ? "含まれている" : "含まれていない"));
		
	}
```


# 実装内容

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

ざっくりとした説明は以下
 * `values`メソッドでenumを配列で返却
 * `Arrays.stream`メソッドで配列をStreamに変換
 * `anyMatch`メソッドで引数の値に一致するメンバ変数があればtrueを返却

※containsValueの説明に関しては、メソッド内のつくりはほぼ同じ（参照するメンバ変数が異なるのみ）のため、割愛

# 実行例
```Java
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メソッド確認！！----
営業部 は含まれている
マーケティング部 は含まれていない
```