[java] Java : 열거 형에 지정된 문자열이 포함되어 있는지 확인하십시오.

여기 내 문제가 있습니다-열거 형에 해당하는 열거 형을 찾고 있습니다 (존재하는 경우) ArrayList.contains();.

내 코드 문제의 샘플은 다음과 같습니다.

enum choices {a1, a2, b1, b2};

if(choices.???(a1)}{
//do this
} 

이제는 ArrayListStrings가 더 나은 경로 있지만 스위치 / 케이스를 통해 열거 형 내용을 실행해야합니다. 따라서 내 문제.

이와 같은 것이 존재하지 않는다고 가정하면 어떻게 할 수 있습니까?



답변

이것은해야합니다 :

public static boolean contains(String test) {

    for (Choice c : Choice.values()) {
        if (c.name().equals(test)) {
            return true;
        }
    }

    return false;
}

이 방법은 나중에 열거 형 값을 추가하는 것에 대해 걱정할 필요가 없으며 모두 확인됩니다.

편집 : 열거 형이 매우 큰 경우 HashSet에 값을 붙일 수 있습니다.

public static HashSet<String> getEnums() {

  HashSet<String> values = new HashSet<String>();

  for (Choice c : Choice.values()) {
      values.add(c.name());
  }

  return values;
}

그런 다음 수행 할 수 있습니다 : values.contains("your string")true 또는 false를 반환합니다.


답변

대신 Apache commons lang3 lib를 사용하십시오.

 EnumUtils.isValidEnum(MyEnum.class, myValue)


답변

당신이 사용할 수있는 Enum.valueOf()

enum Choices{A1, A2, B1, B2};

public class MainClass {
  public static void main(String args[]) {
    Choices day;

    try {
       day = Choices.valueOf("A1");
       //yes
    } catch (IllegalArgumentException ex) {
        //nope
  }
}

검사가 자주 실패 할 것으로 예상되는 경우, 다른 루프가 보여준 것처럼 간단한 루프를 사용하는 것이 좋습니다. 열거 형에 많은 값이 포함 된 경우 ( 아마도 HashSet열거 형 또는 이와 유사한 열거 형 값이 문자열로 변환되어 HashSet대신 쿼리 됨) .


답변

Java 1.8을 사용하는 경우 Stream + Lambda를 선택하여이를 구현할 수 있습니다.

public enum Period {
    DAILY, WEEKLY
};

//This is recommended
Arrays.stream(Period.values()).anyMatch((t) -> t.name().equals("DAILY1"));
//May throw java.lang.IllegalArgumentException
Arrays.stream(Period.values()).anyMatch(Period.valueOf("DAILY")::equals);


답변

더 나은 :

enum choices {
   a1, a2, b1, b2;

  public static boolean contains(String s)
  {
      for(choices choice:values())
           if (choice.name().equals(s))
              return true;
      return false;
  }

};


답변

Guavas Enums 는 당신의 친구가 될 수 있습니다

예를 들면 다음과 같습니다.

enum MyData {
    ONE,
    TWO
}

@Test
public void test() {

    if (!Enums.getIfPresent(MyData.class, "THREE").isPresent()) {
        System.out.println("THREE is not here");
    }
}


답변

먼저 열거 형을 List로 변환 한 다음 list contains 메소드를 사용할 수 있습니다

enum Choices{A1, A2, B1, B2};

List choices = Arrays.asList(Choices.values());

//compare with enum value 
if(choices.contains(Choices.A1)){
   //do something
}

//compare with String value
if(choices.contains(Choices.valueOf("A1"))){
   //do something
}