【问题标题】:Java Set contains multiple return optionsJava Set 包含多个返回选项
【发布时间】:2017-07-09 17:15:27
【问题描述】:

我得到了一段运行良好的代码,但我想知道是否有更好的方法来获得相同的结果。

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

所以基本上这就是代码(xyzc 都是常量)。所以该方法接受一组字符串并且必须返回正确的枚举。有没有更好的方法来达到同样的效果?

编辑:这就是方法的方式,set 永远不会为空,所以不要介意那部分。

Edit2:希望这可以清除它..

【问题讨论】:

  • 您的代码会导致 NullPointerException。不抱歉...您的 Set 从未初始化。 IDE 应该会告诉你。
  • 代码没有被编译。您必须首先初始化变量。
  • 不,这只是一个例子。集合从一开始就永远不会为空。
  • 您可以使用 Map 并为键提供一个值,如果 Map 包含它们,它们将返回该值。
  • 我投票决定将此问题作为离题结束,因为您要求进行代码审查和改进建议。您的问题可能与codereview.stackexchange.com 相关(但请先查看他们的规则!)

标签: java set contains options


【解决方案1】:

您可以考虑将转换逻辑封装在 Status 枚举中。类似的东西:

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

【讨论】:

    【解决方案2】:

    你可以使用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");
    

    使用方法:

    String option = map.get("x");
    

    【讨论】:

    • 您确定创建一个新的HashMap 并插入 4 个不同的值会比使用 3 个条件语句更理想吗?
    • 可能不会,但是代码会更干净,更容易扩展。
    • @Zack,但它实际上不起作用,因为他有一个任意集合,可能包含也可能不包含一些有趣的值,而不是有问题的值。使用您的方法,他还必须遍历集合元素或映射键。
    • @M. Prokhorov,他的问题我没有得到这个......我将把我的答案留在这里“也许适合有类似但不同问题的人”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2014-03-17
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多