2011-04-11 52 views
3

我想找到Java Enum中最長的字符串。做這個的最好方式是什麼? 我一直在努力與Enums很多,所以任何建議是值得歡迎的。這是我的枚舉java獲得枚舉中最長的字符串

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, 
} 

編輯:

我沒有界定這個問題非常好,因此我對其進行編輯。 我從我的兩個枚舉中獲取的是一個函數,它接受我定義的兩種枚舉中的任何一種,並找到最長的文字。所以在DOMAIN_STATE中將是「PENDING_TRANSFER_OUT」。我希望這能讓事情變得更容易理解。

EDIT 2

所以現在我心中已經得到了SOM幫助,已經很大了,但是我不知道爲什麼這個代碼將無法正常工作。它嘗試使用enumList.values()時抱怨?這是我無法找到解決方案的原因,我錯過了什麼? =)

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

決賽:

所以現在我knwo爲什麼沒有工作。我希望遍歷EnumSet而不是Enum。因爲如果我沒有完全誤解,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'。有一個方法'values()'爲每個'enum'定義,它返回一個值數組。 – 2011-04-11 13:25:04

+2

我沒有看到任何字符串。你的意思是最長的枚舉文字,比如第二個枚舉中的'PENDING_TRANSFER_OUT'? – 2011-04-11 13:25:11

+0

我很困惑,上面的例子中沒有字符串,DOMAIN_STATE與什麼有關? – 2011-04-11 13:25:23

回答

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文字還是它的長度。 – 2011-04-11 13:28:18

+0

這使我的臉上露出了微笑。 :) – mre 2011-04-11 13:30:37

+0

@edalorzo:謝謝,我糾正它。 – Ralph 2011-04-11 13:37:41

0

遍歷DOMAIN_LANGUAGES.values,發現最長的名稱。

1

你可以做YourEnum.values()然後遍歷全部並獲得由name()返回的字符串的長度。