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();
daniel__
fuente
1
Solución Java 8: stackoverflow.com/a/51837794/1216775
akhil_mittal

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()...

GreenMatt
fuente
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.

SBA
fuente
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));

}
Sameer Kazi
fuente
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
akhil_mittal
fuente
¡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
1
Uso de @maryemneyli findAny: docs.oracle.com/javase/8/docs/api/java/util/stream/…
akhil_mittal
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.

codingpower472
fuente
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

Aman Goyal
fuente
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");         
        }
    } 
}
Prasanth R i-cargas de prueba Eng
fuente