Controlla se esiste un valore in ArrayList


179

Come posso verificare se esiste un valore scritto nello scanner in 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();

Risposte:


320

Basta usare ArrayList.contains (desiderataElement) . Ad esempio, se stai cercando l'account conta1 dal tuo esempio, potresti usare qualcosa come:

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

Modifica: Nota per far funzionare tutto ciò, dovrai sovrascrivere correttamente i metodi equals () e hashCode () . Se si utilizza Eclipse IDE, è possibile generare questi metodi aprendo prima il file di origine per l' CurrentAccountoggetto e selezionandoSource > Generate hashCode() and equals()...


9
Il metodo equals () deve essere sovrascritto in CurrentAccount per determinare quando sono lo stesso oggetto
Javi,

3
In tal caso, anche hashcode () deve essere sovrascritto. Per contratto hashcode () oggetti uguali devono avere codici hash uguali.
Zockman,

@zockman sicuramente hai ragione, anche se penso che l'override degli uguali sia ancora più importante in questo caso perché se non un oggetto CurrentAccount potrebbe non essere lo stesso anche quando tutti i loro attributi hanno lo stesso valore. Ma sono d'accordo anche nel sovrascrivere hashcode ().
Javi,

Esiste una versione che confronta le referenze di oggetti?
Tomáš Zato - Ripristina Monica il

Ciao, è possibile controllare la lista se contiene "Alberto Carlos"?
Jesse,

47

Meglio usare a HashSetche a ArrayListquando si verifica l'esistenza di un valore. Documenti Java per HashSetdice:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() potrebbe essere necessario ripetere l'intero elenco per trovare l'istanza che stai cercando.


16

Si prega di fare riferimento alla mia risposta su questo post .

Non è necessario ripetere Listil equalsmetodo semplicemente sovrascrivendo .

Usa equalsinvece di==

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

Chiamalo così:

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

}

4
stai usando == per confrontare le stringhe
Mightian

2
Dovresti usare equals () invece di == per confrontare le stringhethis.name.equals(employee.getName())
Lucky

1
mi ha salvato la vita, fratello. Potrei comprarti una birra o due :)
Kennedy Kambo,

10

Possiamo usare il containsmetodo per verificare se esiste un elemento se abbiamo fornito l'implementazione equalse hashCodealtrimenti verrà usato il riferimento all'oggetto per il confronto di uguaglianza. Anche nel caso di un elenco containsè O(n)un'operazione dove, come è O(1)per HashSetcosì meglio utilizzare successivamente. In Java 8 possiamo usare anche i flussi per controllare l'elemento in base alla sua uguaglianza o in base a una proprietà specifica.

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

grazie per questa fantastica risposta in realtà è un +1! Ho usato questa parte del codice: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);ora ne ho bisogno per estrarre quell'elemento! È possibile ??
Maryem Neyli,


La chiamata richiede il livello API 24 (l'attuale minimo è 19):java.util.Collection#stream
shirin

2

Basta usare .contains. Ad esempio, se si stava verificando se un ArrayList arrcontiene un valore val, si eseguirà semplicemente arr.contains(val), che restituirà un valore booleano che rappresenta se il valore è contenuto. Per ulteriori informazioni, consultare i documenti per .contains.


1

Quando Elenco array contiene oggetti di Primitive DataType.

Use this function:
arrayList.contains(value);

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

Quando l'elenco di array contiene l'oggetto DataDype definito dall'utente.

Follow this below Link 

Come confrontare gli attributi degli oggetti in una ArrayList?

Spero che questa soluzione ti possa aiutare. Grazie


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");         
        }
    } 
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.