Java集合包含多个返回选项
我有一段代码运行得很好,但我想知道是否有更好的方法来获得相同的结果Java集合包含多个返回选项,java,set,contains,options,Java,Set,Contains,Options,我有一段代码运行得很好,但我想知道是否有更好的方法来获得相同的结果 public enum Status { ENUM1, ENUM2, ENUM3, ENUM4; public static Status getStatus(Set<String> set) { if (set.contains("x")) { return ENUM1; } if (set.contains("y") ||
public enum Status {
ENUM1, ENUM2, ENUM3, ENUM4;
public static Status getStatus(Set<String> set) {
if (set.contains("x")) {
return ENUM1;
}
if (set.contains("y") || set.contains("z")) {
return ENUM2;
}
if (set.contains("c")) {
return ENUM3;
}
return ENUM4;
}
}
公共枚举状态{
枚举1、枚举2、枚举3、枚举4;
公共静态状态getStatus(设置){
if(集合包含(“x”)){
返回枚举1;
}
if(set.contains(“y”)| set.contains(“z”)){
返回枚举2;
}
如果(集合包含(“c”)){
返回枚举3;
}
返回枚举4;
}
}
基本上这就是代码(xyzc都是常量)。因此,该方法接受一组字符串,并且必须返回正确的枚举。有没有更好的方法达到同样的效果
编辑:这就是方法的方式,集合从一开始就不是空的,所以不要介意那个部分
Edit2:希望这能把它弄清楚。你可以使用一个
HashMap
:
HashMap<String, String> map = new HashMap<>();
// init with
map.put("x", "option 1");
map.put("y", "option 2");
map.put("z", "option 2");
map.put("c", "option 3");
可以考虑将转换逻辑封装在状态枚举中。诸如此类:
enum Status{
Option1("x"),
Option2("y", "z"),
Option3("c"),
Default;
Status (String ... values){
this.values = values;
}
String [] values;
static Status convert(Set<String> set){
for (Status status : Status.values())
for (String str : status.values)
if (set.contains(str))
return status;
return Default;
}
}
enum状态{
选择权1(“x”),
选择2(“y”、“z”),
选择3(“c”),
违约
状态(字符串…值){
这个值=值;
}
字符串[]值;
静态状态转换(设置){
对于(状态:Status.values())
for(字符串str:status.values)
if(set.contains(str))
返回状态;
返回默认值;
}
}
您的代码会导致NullPointerException。不,对不起。。。您的集合从未初始化。IDE应该向您展示这一点。代码不仅仅是编译的。你必须首先初始化变量。不,它不是,这只是一个例子。该集合从一开始就不是空的。您可以使用映射并为键提供一个值,如果映射中包含键,它们将返回该值。我投票将此问题作为离题问题结束,因为您正在请求代码审阅和改进建议。你的问题可能在主题上(但先检查他们的规则!)你确定创建一个新的HashMap
并插入4个不同的值会比使用3个条件语句更理想吗?可能不会,但代码会更干净,更容易扩展。@Zack,但它实际上不起作用,因为他有一个任意的集合,可能包含也可能不包含一些有趣的值,而不是所讨论的值。使用您的方法,他还必须在集合元素或映射键上迭代。@M.Prokhorov,我不是因为他的问题才得到这个的。。。我会把我的答案留在这里,因为“可能适合有类似但不同问题的人”
enum Status{
Option1("x"),
Option2("y", "z"),
Option3("c"),
Default;
Status (String ... values){
this.values = values;
}
String [] values;
static Status convert(Set<String> set){
for (Status status : Status.values())
for (String str : status.values)
if (set.contains(str))
return status;
return Default;
}
}