如何在Java Switch Case Value中添加String Array项?

问题描述 投票:0回答:3

我们知道,从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;
    }
}

所以我在想如何使用部门的数组索引返回部门项目,我可以在案例值中使用相同的东西,例如,

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

如果类别项包含大字符串,则情况将变得太长而无法写入。如果java不允许这样,你可以建议其他方式,以便我的代码不会变得麻烦吗?谢谢。

java arrays string switch-statement
3个回答
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
投票

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

然后你将不得不使用map.get(category)代替开关,它将返回部门。

你可以把它作为Map<String, List<String>>来将部门映射到类别,并且做到

for(String dept : map.keySet())
{
  if(map.get(dept).contains(category))
  {
    return dept;
  }
}

编辑:使用枚举,如果将来不会有额外的部门或类别,这将很有效。地图允许更动态的方法。如果使用得当,两者都能正常工作


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来做这件事。

© www.soinside.com 2019 - 2024. All rights reserved.