2011-04-11 4 views
3

자바 열거 형에서 가장 긴 문자열을 찾고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 Enums와 많은 협조를 해왔으므로 어떤 제안이라도 환영합니다. 이 내 열거 있습니다자바가 열거 형에서 가장 긴 문자열을 얻는다

public enum DOMAIN_LANGUAGES { 
    ENG, SWE; 

    public static List<DOMAIN_LANGUAGES> getDomainLanguages(){ 
     List<DOMAIN_LANGUAGES> languages = new ArrayList<DOMAIN_LANGUAGES>(); 
     languages.add(ENG); 
     languages.add(SWE); 
     return languages; 
    } 
} 

public enum DOMAIN_STATE { 
    LIVE, 
    PENDING_RENEWAL, 
    PENDING_TRANSFER_OUT, 
} 

편집 : 나는 아주 잘이 질문을 정의 didnt는 따라서 내가 그것을 편집

. 두 개의 enum에서 무엇을 외쳐 왔는지는 내가 정의한 두 종류의 enum 중 하나를 취해 가장 긴 리터럴을 찾는 함수입니다. 따라서 DOMAIN_STATE에서는 "PENDING_TRANSFER_OUT"이됩니다. 나는 이것이 물건을 조금 더 이해하기 쉽게 바란다. 중대하지만,이 코드가 작동하지 않습니다 이유는 확실하지 메신저했다

편집 2

그래서 지금 i'v가받은 솜 도움이됩니다. 그것은 enumList.values ​​()를 사용하려고하면 불평합니까? 이것은 내가 처음부터 해결책을 찾지 못했던 이유이며, 나는 무엇을 놓치고 있습니까? =)

public String CalculateDropdownListWidth(Enum enumList){ 
     int chars = 0; 
     for(Enum e : enumList.values()){ 
      //do stuff 
     } 
} 

FINAL :

그래서 지금은 왜 didnt 한 일을 knwo. 열거 형 대신 EnumSet을 루프하도록했습니다. Enum은 완전히 잘못 해석되지 않으면 "집합"의 하나뿐입니다. 이것이 제 해결책입니다. 도와 주신 모든 분들께 감사드립니다!

public String CalculateDropdownListWidth(EnumSet enumList){ 
    int chars = 0; 
    for(Object e : enumList){ 
     if(e.toString().length() > chars){ 
      chars = e.toString().length(); 
     } 
    } 

    //Pixelmodifier 
    Double oneChar = 1.35; 

    Double result = oneChar * chars; 

    return String.valueOf(result) + "px"; 
} 

도움이 필요하면 Thx!

은/Marthin

+2

'getDomainLanguages'가 필요하지 않습니다. 값의 배열을 반환하는 모든'enum'에 대해 정의 된'values ​​()'메소드가 있습니다. –

+2

문자열이 표시되지 않습니다. 두 번째 enum에서'PENDING_TRANSFER_OUT'처럼 가장 긴 enum 리터럴을 의미합니까? –

+0

위의 예에서 문자열이없고 DOMAIN_STATE와 (과) 무슨 관계가 있습니까? 혼란 스럽습니다. –

답변

5
String longestYet= ""; 
for (Enum<?> value :OfferType.values()){ 
    if (longestYet.length()< value.name().length()) { 
     longestYet= value.name(); 
    }     
} 
longest = longestYet; 

, 당신은 열거 itselve에 추가 한 정적 initialialzer의 값을 설정할 수 있습니다.

public static enum MyType { 

    NORMAL, 
    OTHER; 

    public static final String longest; 
    static{ 
     String longestYet= ""; 
     for (Enum<?> value :MyType.values()){ 
      if (longestYet.length()< value.name().length()) { 
      longestYet= value.name(); 
      }     
     } 
     longest = longestYet; 
    }   
} 

또는 더 나은, 몇 가지 열거 형에서 재사용 할 수있는 백분율 기능에, 정적 초기화 방법을 넣어.

+2

원하는 것이 무엇인지는 분명합니다. enum 리터럴 또는 길이입니다. –

+0

이것은 내 얼굴에 미소를 짓는다. :) – mre

+0

@ edalorzo : 고마워, 나는 그것을 고쳤다. – Ralph

0

DOMAIN_LANGUAGES.values ​​반복 처리 가장 긴 이름을 찾을 수 있습니다. 특정 열거 매우 자주이 값을해야하는 경우

1

YourEnum.values()을 수행 한 다음 모두를 반복하고 name()에 의해 반환 된 문자열의 길이를 가져올 수 있습니다.

관련 문제