在类数组中使用'contains'方法

时间:2017-01-05 09:32:36

标签: java arrays

我有一个这样的课程:

public static class TiposDeHistorial
{
    String CODIGO, TIPO;

    public TiposDeHistorial()
    {
    }

    public String getCODIGO()
    {
        return CODIGO;
    }

    public void setCODIGO(String CODIGO)
    {
        this.CODIGO = CODIGO;
    }

    public String getTIPO()
    {
        return TIPO;
    }

    public void setTIPO(String TIPO)
    {
        this.TIPO = TIPO;
    }
}

及其清单:

ArrayList<TiposDeHistorial> tiposHistorial;

所以我的问题是:我可以使用tiposHistorial.contains(...)来搜索特定的数组字段,例如CODIGOTIPO吗?

4 个答案:

答案 0 :(得分:1)

首先,您没有array而是ArrayList

contains上的List方法使用equals方法对其存储的元素(TiposDeHistorial)进行操作。因此,你的问题的答案是否定的。

尝试tiposHistorial.contains("a")之类的内容将无效,因为类型不匹配:当您尝试检查TiposDeHistorial的元素时,您的列表属于String类型。

答案 1 :(得分:0)

如果您使用的是Java 8,则可以使用以下代码:

org.springframework.remoting.RemoteAccessException: Could not access remote service [rmi://localhost:21303/CaScriptingService]; nested exception is java.rmi.UnmarshalException: Error unmarshaling return; nested exception is: 
    java.lang.ClassNotFoundException: ENIcallMDC (no security manager: RMI class loader disabled) -- Could not access remote service [rmi://localhost:21303/CaScriptingService]; nested exception is java.rmi.UnmarshalException: Error unmarshaling return; nested exception is: 
    java.lang.ClassNotFoundException: ENIcallMDC (no security manager: RMI class loader disabled) -- Error unmarshaling return; nested exception is: 
    java.lang.ClassNotFoundException: ENIcallMDC (no security manager: RMI class loader disabled) -- ENIcallMDC (no security manager: RMI class loader disabled)  
java.util.concurrent.ExecutionException: org.springframework.remoting.RemoteAccessException: Could not access remote service [rmi://localhost:21303/CaScriptingService]; nested exception is java.rmi.UnmarshalException: Error unmarshaling return; nested exception is: 
    java.lang.ClassNotFoundException: ENIcallMDC (no security manager: RMI class loader disabled)

它将返回包含特定CODIGO值的列表中的TiposDeHistorial对象,否则返回null。

关于你的问题:&#34;包含&#34;方法只返回&#34; true&#34;或&#34; false&#34;,而不是对象。此外,它使用&#34; equals&#34;您的对象的方法,因此如果您想使用字段进行搜索,它将无济于事。

答案 2 :(得分:0)

只有当您的对象与ur list元素对象相等时,Contains方法才会返回true。 您可以尝试扩展equals方法,并拥有适用于CODIGO或TIPO的自己的标准。

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        test other = (test) obj;
        if (CODIGO == null) {
            if (other.CODIGO != null)
                return false;
        } else if (!CODIGO.equals(other.CODIGO))
            return false;
        return true;
    }

答案 3 :(得分:0)

这里给出的答案都是正确的,只要你不知道java流,并想检查列表是否包含一些CODIGO和TIPO字段,对我来说最简单的解决方案是:

    ArrayList<TiposDeHistorial> tiposHistorial = new ArrayList<>();
    //add elements to the list
    String tipo = "TIPO"; // the TIPO value You are looking for in the list
    String codigo = "CODIGO"; // the CODIGO value You are looking for in the list
    boolean containsTipo = false;
    boolean containsCodigo = false;
    for (TiposDeHistorial element: tiposHistorial) {
        if (!containsTipo && element.getTIPO().equals(tipo)) {
            containsTipo = true;
        }
        if (!containsCodigo && element.getCODIGO().equals(codigo) ){
            containsCodigo = true;
        }
        if (containsTipo && containsCodigo)
            break;
    }

通过稍微编辑它,你也可以找到数组的哪些元素包含你正在寻找的值,如果这是你的意图