Mazinger
Mazinger

Reputation: 653

Using 'contains' method in a class array

I have a class like this:

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

and a list of it:

ArrayList<TiposDeHistorial> tiposHistorial;

So my question is: can I use tiposHistorial.contains(...) to search in a specific array field, CODIGO or TIPO, for example?

Upvotes: 0

Views: 335

Answers (4)

jacobek09
jacobek09

Reputation: 31

The answers already given here are all correct, just if You don't know java streams, and would like to check if the list contains both some CODIGO and TIPO fields, for me the simplest solution would be:

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

By editing it just a bit, You may also find which elements of the array contain the values You are looking for, if that will be Your intention

Upvotes: 0

shubham
shubham

Reputation: 482

Contains method will return true only if your object equals with ur list elements objects. You can try extending equals method and have your own criteria which can work for either CODIGO or 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;
    }

Upvotes: 0

hotzst
hotzst

Reputation: 7526

First of, you do not have an array but an ArrayList.

The contains method on a List operates with the equals method of it's stored elements (TiposDeHistorial in your case). Therefore the answer to your question is no.

Trying something like tiposHistorial.contains("a") will not work as there is a type mismatch: your list is of type TiposDeHistorial while you try to check for an element of String.

Upvotes: 1

Dmitry Gorkovets
Dmitry Gorkovets

Reputation: 2276

If you are using Java 8 you can use following code:

tiposHistorial.stream()
                .filter(x -> "specific value for CODIGO".equals(x.getCODIGO()))
                .findFirst()
                .orElse(null);

It will return TiposDeHistorial object in the list containing specific CODIGO value or null otherwise.

As for your question: "contains" method just returns "true" or "false", not an object. Moreover it uses "equals" method of your object, so it will not help if you want to search using fields.

Upvotes: 0

Related Questions