我们知道,从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不允许这样,你可以建议其他方式,以便我的代码不会变得麻烦吗?谢谢。
你为什么不用枚举来做那件事。
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
您可以使用Map<String, String>
将类别映射到部门。
然后你将不得不使用map.get(category)
代替开关,它将返回部门。
你可以把它作为Map<String, List<String>>
来将部门映射到类别,并且做到
for(String dept : map.keySet())
{
if(map.get(dept).contains(category))
{
return dept;
}
}
编辑:使用枚举,如果将来不会有额外的部门或类别,这将很有效。地图允许更动态的方法。如果使用得当,两者都能正常工作
我会使用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来做这件事。