List <enum>包含String

时间:2015-09-03 17:02:45

标签: java

我有一个如下所示的枚举列表 -

List<Status> statusList;

状态定义如下

enum Status { YES , NO , MAYBE }

列表包含

Status stat = Status.YES;
statusList.add(stat);

我有一个变量

Status statusVar = Status.YES;

我正在尝试比较如下,但它不起作用,因为我猜它是比较参考。以下返回false。你能建议一个解决方案吗?

statusList.contains(statusVar)

编辑:以下是无效的代码。状态是字符串而不是枚举

import java.util.ArrayList;
import java.util.List;
public class Test {
    private enum Status {
        YES , NO , MAYBE
    }


    public static void main (String[] args){

        List<Status> statusList = new ArrayList<Status>();
        String status = "YES";
        statusList.add(Status.YES);

        if(statusList.contains(status)){
            System.out.println(" Yes ");
        } else {
            System.out.println(" No ");
        }

    }

}

4 个答案:

答案 0 :(得分:5)

如果您正在执行包含,则使用EnumSet

会更有效
Set<Status> status = EnumSet.of(Status.YES);
assert status.contains(Status.YES);

但是,List<Status>也可以。

你是对的,它确实比较了参考,但是如果你有

,这只会失败
  • 多个ClassLoader和类Status实际上是不同的。
  • 您可以使用Status
  • 创建Unsafe.allocateInstance(Status.class)的新实例

更有可能的是,你没有测试你的想法,而且情况与你所描述的不完全相同。

答案 1 :(得分:2)

private enum Status {
    YES , NO , MAYBE
    ;
    public Status getByName(String name){
        for (Status st : Status.values()) {
            if (st.toString().equals(name)){
                return st;
            }
        }
        return null;
    }
}

试试这个!

答案 2 :(得分:1)

您可以添加一个函数toString()并包含()作为帮助程序:

private enum Status {
    YES("Yes") , NO ("Yes") , MAYBE("Yes");
    private final String label;

    /**
     * Instantiates a new Status.
     * @param label the label
     */
    private Status (final String label) {
        this.label = label;
    }

    @Override
    public String toString() {
        return label;
    }

    public static boolean contains(final String test) {

        for (final Status value : Status.values()) {
            if (value.toString().equals(test)) {
                return true;
            }
        }
        return false;

    }
}

答案 3 :(得分:0)

enum Status { YES , NO , MAYBE }

public static void main(String[] args) {
    List<Status> lista = new ArrayList<>();
    lista.add(Status.YES);

    Status stat = Status.YES;

    System.out.println(lista.contains(Status.YES));//true
    System.out.println(lista.contains(stat));//true

}

我制作了这段代码并打印了两种方式,并且效果很好

你记得要实例化变量statusList