2011-04-11 48 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()返回的字符串的长度。