[java] Java : 열거 형에 지정된 문자열이 포함되어 있는지 확인하십시오.
여기 내 문제가 있습니다-열거 형에 해당하는 열거 형을 찾고 있습니다 (존재하는 경우) ArrayList.contains();
.
내 코드 문제의 샘플은 다음과 같습니다.
enum choices {a1, a2, b1, b2};
if(choices.???(a1)}{
//do this
}
이제는 ArrayList
의 Strings
가 더 나은 경로 있지만 스위치 / 케이스를 통해 열거 형 내용을 실행해야합니다. 따라서 내 문제.
이와 같은 것이 존재하지 않는다고 가정하면 어떻게 할 수 있습니까?
답변
이것은해야합니다 :
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
}