Compruebe si existe un valor en ArrayList


179

¿Cómo puedo verificar si un valor que está escrito en el escáner existe en un ArrayList?

List<CurrentAccount> lista = new ArrayList<CurrentAccount>();

CurrentAccount conta1 = new CurrentAccount("Alberto Carlos", 1052);
CurrentAccount conta2 = new CurrentAccount("Pedro Fonseca", 30);
CurrentAccount conta3 = new CurrentAccount("Ricardo Vitor", 1534);
CurrentAccount conta4 = new CurrentAccount("João Lopes", 3135);

lista.add(conta1);
lista.add(conta2);
lista.add(conta3);
lista.add(conta4);

Collections.sort(lista);

System.out.printf("Bank Accounts:" + "%n");
Iterator<CurrentAccount> itr = lista.iterator();
while (itr.hasNext()) {
    CurrentAccount element = itr.next();
    System.out.printf(element + " " + "%n");
}
System.out.println();

Respuestas:


320

Simplemente use ArrayList.contains (desiredElement) . Por ejemplo, si está buscando la cuenta conta1 de su ejemplo, podría usar algo como:

if (lista.contains(conta1)) {
    System.out.println("Account found");
} else {
    System.out.println("Account not found");
}

Editar: tenga en cuenta que para que esto funcione, deberá anular correctamente los métodos equals () y hashCode () . Si está utilizando Eclipse IDE, puede generar estos métodos abriendo primero el archivo fuente de su CurrentAccountobjeto y seleccionandoSource > Generate hashCode() and equals()...


9
El método equals () debe ser anulado en CurrentAccount para determinar cuándo son el mismo objeto
Javi

3
En ese caso, el código hash () también debe ser anulado. Por contrato hashcode (), los objetos iguales deben tener códigos hash iguales.
zockman

@zockman seguro que tienes razón, aunque creo que anular iguales es aún más importante en este caso porque si no, un objeto CurrentAccount puede no ser el mismo incluso cuando todos sus atributos tienen el mismo valor. Pero también estoy de acuerdo en anular el código hash ().
Javi

¿Existe una versión que compare las referencias de objetos?
Tomáš Zato - Restablece a Mónica

Hola, ¿es posible verificar la lista si contiene "Alberto Carlos"?
Jesse

47

Es mejor usar a HashSetque an ArrayListcuando verifica la existencia de un valor. Documentos de Java para HashSetdice:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() Es posible que deba iterar toda la lista para encontrar la instancia que está buscando.


16

Por favor, consulte mi respuesta en esta publicación .

No es necesario iterar sobre el Listsolo sobrescribir el equalsmétodo.

Usar en equalslugar de==

@Override
public boolean equals (Object object) {
    boolean result = false;
    if (object == null || object.getClass() != getClass()) {
        result = false;
    } else {
        EmployeeModel employee = (EmployeeModel) object;
        if (this.name.equals(employee.getName()) && this.designation.equals(employee.getDesignation())   && this.age == employee.getAge()) {
            result = true;
        }
    }
    return result;
}

Llámalo así:

public static void main(String args[]) {

    EmployeeModel first = new EmployeeModel("Sameer", "Developer", 25);
    EmployeeModel second = new EmployeeModel("Jon", "Manager", 30);
    EmployeeModel third = new EmployeeModel("Priyanka", "Tester", 24);

    List<EmployeeModel> employeeList = new ArrayList<EmployeeModel>();
    employeeList.add(first);
    employeeList.add(second);
    employeeList.add(third);

    EmployeeModel checkUserOne = new EmployeeModel("Sameer", "Developer", 25);
    System.out.println("Check checkUserOne is in list or not");
    System.out.println("Is checkUserOne Preasent = ? " + employeeList.contains(checkUserOne));

    EmployeeModel checkUserTwo = new EmployeeModel("Tim", "Tester", 24);
    System.out.println("Check checkUserTwo is in list or not");
    System.out.println("Is checkUserTwo Preasent = ? " + employeeList.contains(checkUserTwo));

}

44
estás usando == para comparar cadenas
Mightian

2
Debería usar equals () en lugar de == para comparar cadenasthis.name.equals(employee.getName())
Lucky

1
salvó mi vida hermano. Podría comprarle una cerveza o dos rn :)
Kennedy Kambo

10

Podemos usar el containsmétodo para verificar si existe un elemento si hemos proporcionado la implementación equalsy hashCodesi no, la referencia de objeto se usará para la comparación de igualdad. También en el caso de una lista containses O(n)operación en la que como es O(1)de HashSetpor lo mejor para su uso posterior. En Java 8, también podemos usar secuencias para verificar elementos en función de su igualdad o de una propiedad específica.

Java 8

CurrentAccount conta5 = new CurrentAccount("João Lopes", 3135);
boolean itemExists = lista.stream().anyMatch(c -> c.equals(conta5)); //provided equals and hashcode overridden
System.out.println(itemExists); // true

String nameToMatch = "Ricardo Vitor";
boolean itemExistsBasedOnProp = lista.stream().map(CurrentAccount::getName).anyMatch(nameToMatch::equals);
System.out.println(itemExistsBasedOnProp); //true

¡Gracias por esta increíble respuesta en realidad es un +1! Usé esta parte del código: ¡ boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);ahora lo necesito para extraer ese artículo! Es posible ??
maryem neyli


La llamada requiere el nivel 24 de API (el minimo actual es 19):java.util.Collection#stream
shirin

2

Solo úsalo .contains. Por ejemplo, si estuviera verificando si una ArrayList arrcontiene un valor val, simplemente se ejecutaría arr.contains(val), lo que devolvería una representación booleana si el valor está contenido. Para obtener más información, consulte los documentos para .contains.


1

Cuando la lista de matrices contiene un objeto de tipo de datos primitivo.

Use this function:
arrayList.contains(value);

if list contains that value then it will return true else false.

Cuando la lista de matrices contiene un objeto de tipo de datos definido por el usuario.

Follow this below Link 

¿Cómo comparar los atributos de Objetos en una ArrayList?

Espero que esta solución te ayude. Gracias


1
public static void linktest()
{
    System.setProperty("webdriver.chrome.driver","C://Users//WDSI//Downloads/chromedriver.exe");
    driver=new ChromeDriver();
    driver.manage().window().maximize();
    driver.get("http://toolsqa.wpengine.com/");
    //List<WebElement> allLinkElements=(List<WebElement>) driver.findElement(By.xpath("//a"));
    //int linkcount=allLinkElements.size();
    //System.out.println(linkcount);
    List<WebElement> link = driver.findElements(By.tagName("a"));
    String data="HOME";
    int linkcount=link.size();
    System.out.println(linkcount);
    for(int i=0;i<link.size();i++) { 
        if(link.get(i).getText().contains(data)) {
            System.out.println("true");         
        }
    } 
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.