如何在Java的Switch的Case值中添加字符串数组项?

时间:2019-03-20 10:08:26

标签: java arrays string switch-statement

我们知道,自Java 7起,Switch的表达式可以是String。因此,我正在开发一个应用程序,其中,当用户选择类别时,将根据类别值为他/她分配相关部门。这是代码:-

    public class Selector {
    ///String array to save the departments
    private final static String[] DEPTS = {
            "A",
            "B",
            "C",
            "D"
    };

    //String array for the categories
    private final static String[] CATEGORY = {
            "Wind",
            "Air",
            "Fire",
            "Cloud",
            "River",
            "Tree",
            "Abc",
            "Def"
    };

    //return the department when user selects a particular category item from above
    public static String setDepartment(String category) {
        switch(category){
            case "Wind":
                return DEPTS[0];
            case "Air":
                return DEPTS[1];
            case "Fire": case "Cloud": case "River":
                return DEPTS[2];
            case "Tree": case "Abc": case "Def":
                return DEPTS[3];            
        }
        return null;
    }
}

所以我在考虑如何使用Department的数组索引返回Department项目,我是否可以在case值中使用相同的东西,例如

case CATEGORY[0]: case CATEGORY[1]: 
     return DEPTS[2];

原因是,如果类别项目包含大字符串,则情况将变得太长而无法编写。如果Java不允许这样做,那么您可以提出其他建议,以免我的代码繁琐吗?谢谢。

3 个答案:

答案 0 :(得分:6)

为什么不使用枚举来做到这一点。

public class Selector {

  private enum DepartmentCategory = {
    Wind("A"),
    Air("B"),
    Fire("C"),
    Cloud("C"),
    River("C"),
    Tree("D"),
    Abc("D"),
    Def("E");

    private String department;

    DepartmentCategory(String department) {
      this.department = department;
    }
    public String getDepartment() {
      return department;
    }
  };
}

现在,如果为您提供部门,则可以通过以下代码轻松获得类别。

String category = "Wind";
DepartmentCategory dc = DepartmentCategory.valueOf(category);
dc.getDepartment(); // Returns the department

答案 1 :(得分:1)

您可以使用Map<String, String>将类别映射到部门。

然后必须使用map.get(category)来代替部门,而这将返回部门。

您可以将{部门}映射到类别并执行

Map<String, List<String>>

编辑:使用枚举,如果将来不再有多余的部门或类别,则效果很好。映射允许采用更动态的方法。如果正确使用,两者都可以正常工作

答案 2 :(得分:0)

我将使用Map<String, String>来存储您的部门和类别之间的关联,而不是使用switch语句。似乎您正试图将Array []用于其非预期的目的。

如果您使用Map<String, String>,则可以按以下方式存储数据:

Map<String, String> departments = new HashMap<String, String>();
departments.add("Wind", "A")
departments.add("Fire", "B")
departments.add("Fire", "C")
departments.add("River", "C")
departments.add("Cloud", "C")

然后您可以使用以下语法轻松检索部门名称:

String category = "Cloud"
String department = departments.get(category)

如果要关联多个部门,可以使用Map<String, List<String>>来表示类型和类别与多个部门之间的关系。

传统上,如果您想在数据库中表示它,则将使用带有索引和下方对象的地图。

我认为您不希望使用Arrays来完成此操作。