Ява получить самую длинную строку в перечислении - PullRequest
3 голосов
/ 11 апреля 2011

Я хотел бы найти самую длинную строку в Java Enum. Каков наилучший способ сделать это? Я не слишком много работал с 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,
}

EDIT:

Я не очень хорошо определил этот вопрос, и поэтому я его редактирую. Что мне нужно от двух моих перечислений - это функция, которая принимает любое из двух перечислений, которые я определила, и находит самый длинный литерал. Так что в DOMAIN_STATE это будет "PENDING_TRANSFER_OUT". Я надеюсь, что это немного облегчает понимание.

РЕДАКТИРОВАТЬ 2

Так что теперь я получил некоторую помощь, которая была отличной, но я не уверен, почему этот код не будет работать. Он жалуется, когда я пытаюсь использовать enumList.values ​​()? Это причина, по которой я не смог найти решение, чего мне не хватает? =)

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

FINAL:

Так что теперь я знаю, почему это не сработало. Я должен зациклить 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";
}

Спасибо за любую помощь!

/ Marthin

Ответы [ 3 ]

5 голосов
/ 11 апреля 2011
 String longestYet= "";
 for (Enum<?> value :OfferType.values()){
     if (longestYet.length()< value.name().length()) {
        longestYet= value.name();   
     }                
 }
 longest = longestYet;

Если вам нужно это значение очень часто для определенного перечисления, вы можете добавить его в само перечисление и установить значение в статическом инициализаторе.

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

илиеще лучше, поместите метод статического инициализатора в функцию Util, которую можно повторно использовать в нескольких перечислениях.

1 голос
/ 11 апреля 2011

Вы можете сделать YourEnum.values(), затем пройти через все и получить длину строки, возвращаемой name().

0 голосов
/ 11 апреля 2011

Переберите DOMAIN_LANGUAGES.values ​​и найдите самое длинное имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...