Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java集合包含多个返回选项_Java_Set_Contains_Options - Fatal编程技术网

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;
    }
}