java – 当所有可能的情况都已知时,switch语句的替代方法?

我是Java的新手,我偶然发现了以下问题.

我正在从txt文件中读取电影列表,其中一个字段是电影被分类为什么类型的字符串表示,以及1-5的数字表示,表示电影已收到一个或多个奖项.

EKS.一部电影在此字段“12bSt”中可能具有以下值
这意味着电影是b =传记,S =体育,2 =赢得学院奖.
atm我这样做:

    String[] genreStringToArray(String genre) {
    char[] genreCharArray = genre.toCharArray(); 
    this.genreArr = new String[genreCharArray.length];
    for (int i = 0; i < genreCharArray.length; i++) {
        switch (genreCharArray[i]) {
            case 'a': genreArr[i] = "Action";       break;
            case 'A': genreArr[i] = "Animation";        break;
            case 'b': genreArr[i] = "biographical";     break;
            case 'c': genreArr[i] = "comedy";       break;
            case 'C': genreArr[i] = "children";     break;
            case 'd': genreArr[i] = "drama";        break;
            case 'D': genreArr[i] = "documentary";      break;
            case 'e': genreArr[i] = "epic";         break;
                                 ..... etc
            case 2:genreArr[i] = "Academy award";       break;
            case 3:genreArr[i] = "Palme d`or";      break;
            case 4:genreArr[i] = "Sight & sound";       break;
            case 5:genreArr[i] = "AFI top 100";     break;
        }
    }
    return genreArr;
}

我的问题是,哪种实施方式比这更有效?

最佳答案
使用带有字符(或只是字符串)作为键的映射,将字符串作为值.

Map<Character, String> genres = new HashMap<Character, String>() {{
    put('b', "biographical");
    put('C', "Children");
    put('2', "Academy Award");
    // etc...
}};

String genre = "b2C";

List<String> info = new ArrayList<String>();
for (int i = 0; i < genre.length(); i++) {
    info.add(genres.get(genre.charAt(i));
}

System.out.println(StringUtils.join(info, ", "));

Outputs: biographical, Academy Award, Children

基本上可以使用枚举完成相同的操作,如果您需要传递该信息,最好以类型安全的方式执行此操作.

转载注明原文:java – 当所有可能的情况都已知时,switch语句的替代方法? - 代码日志