Добавить другую информацию в поля перечисления - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть следующее перечисление Group, которое я отменяю, чтобы вернуть правильный идентификатор. Строка зависит от параметра word2 Строка.

Код 1

public enum Group {

    KG1("10460"),
    KG2("10461"),
    KG3("10462"),
    KG4("10463");

    private Group (String id){
        this.id = id;
    }

    private final String id;

    public String getId(){
        return id;
    }

    public static String getGroupByWord2(String word2){
        if(word2.contains("other company")){
            return KG3.toString();
        }else if(word2.contains("neu company")){
            return KG1.toString();
        }

        return "";
    }

    @Override
    public String toString() {
        return getId();
    }

}

Теперь я хочу добавить информацию other company, neu company в поля перечисления. Поэтому я изменил перечисление на эту форму ниже, но я сталкиваюсь с пробем что он не дает того же результата, что и code 1. Как добавить строки other company, neu company в поля перечисления, чтобы получить тот же результат, что и в code 1?

Код 2

public enum Group {

KG1("10460", "neu company"),
KG2("10461", ""),
KG3("10462", "other company"),
KG4("10463", "");

    private Group (String id, String word){
        this.id = id;
        this.word = word;
    }

    private final String id;
    private final String  word;

    public String getId(){
        return id;
    }

    public String getWord() {
        return word;
    }

    public static String getGroupByWord2(String word2){

        for (Group group : Group.values()) {
            if (word2.contains( group.getWord())) {
                return group.getId();
            }      
        }

        return null;
    }

    @Override
    public String toString() {
        return getId();
    }

}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Код на самом деле работает нормально, разница между двумя фрагментами равна equalsIgnoreCase () и содержит (), а значение KG2 - пустая строка, которая будет соответствовать любому непустому строковому значению. Ниже приведен тестовый и отформатированный код с изменением функции has () на equals ():

 public static void main(String[] args) {
    System.out.println(Group.getGroupByWord2("neu company")); //10460
    System.out.println(Group.getGroupByWord2("other company")); //10462
    System.out.println(Group.getGroupByWord2("non existing")); //null
    System.out.println(Group.getGroupByWord2(" ")); //null
}


public enum Group {

    KG1("10460", "neu company"),
    KG2("10461", ""),
    KG3("10462", "other company"),
    KG4("10463", "");

    Group(String id, String word) {
        this.id = id;
        this.word = word;
    }

    private final String id;
    private final String word;

    public String getId() {
        return id;
    }

    public String getWord() {
        return word;
    }

    public static String getGroupByWord2(String word2) {
        for (Group group : Group.values()) {
            if (word2.equalsIgnoreCase(group.getWord())) {
                return group.toString();
            }
        }

        return null;
    }

    @Override
    public String toString() {
        return getId();
    }

}
0 голосов
/ 26 апреля 2018

В первой версии вы проверяете, является ли word2 либо other company, либо neu company, и возвращаете соответствующее строковое представление enum. Но во втором вы проверяете word2.contains(group.getWord()), который возвращает true, когда group.getWord() - пустая строка, и, следовательно, вы не можете сделать word пустой строкой для остальных перечислений.

Если пустые строки не являются одним из допустимых случаев (действительный word2), просто добавьте условие для проверки на наличие пустой строки

if (!group.getWord().isEmpty() && word2.contains(group.getWord()))

Еще одно отличие состоит в том, что в конце (когда совпадение не найдено) вы возвращаете null, а не пустую строку в версии 1.

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