我们知道,自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不允许这样做,那么您可以提出其他建议,以免我的代码繁琐吗?谢谢。
答案 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来完成此操作。