在If条件下匹配Java中的枚举字符串

时间:2017-03-29 03:13:50

标签: java enums

我有一个枚举:

public enum Status{
   A("A"),
   B("B"),
   C("C"),
   D("D"),
   E("E")
}

A,B,C属于一个类别,D& E属于不同类别。 现在当我得到一个字符串时,我想决定它属于哪个类别。 基本上,

String s;
if   s.equals( Status.A.toString()) || s.equals(Status.B.toString()) || s.equals( Status.C.toString()) 
            return 1; 

        else return 2;

现在,这可以通过5个字母来管理。如果我有26个字母,if条件的数量将无法管理。有没有更好的方法来写这个?

2 个答案:

答案 0 :(得分:5)

不是在代码中决定类别,而是将其存储在enum本身。您不仅限于单个存储属性;你可以拥有任意多的人。

将构造函数更改为除字母外的类别,并将其存储在enum

public enum Status {
    A("A", 1),
    B("B", 1),
    C("C", 1),
    D("D", 2),
    E("E", 2);
    private String name;
    private int category;
    public String getName() { return name; }
    public int getCategory() { return category; }
    Status(String name, int category) {
        this.name = name;
        this.category = category;
    }
}

现在很清楚哪个枚举属于哪个类别,因为类别是以声明方式而非算法方式分配的。

答案 1 :(得分:2)

如何维护每个类别的枚举列表,然后将您的字符串与类别列表中的枚举进行比较?请参阅以下示例。

    List<Status> category1 = new ArrayList<Status>();
    category1.add(Status.A);
    category1.add(Status.B);
    category1.add(Status.C);
    List<Status> category2 = new ArrayList<Status>();
    category2.add(Status.D);
    category2.add(Status.E);

    for(Status e : category1) {
        if(s.equals(e.toString()))
            return true;
    }

    for(Status e : category2) {
        if(s.equals(e.toString()))
            return true;
    }

    return false;