Vérifier si une valeur existe dans ArrayList

179

Comment puis-je vérifier si une valeur écrite dans le scanner existe dans 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__
la source
1
Solution Java 8: stackoverflow.com/a/51837794/1216775
akhil_mittal

Réponses:

320

Utilisez simplement ArrayList.contains (desireElement) . Par exemple, si vous recherchez le compte conta1 de votre exemple, vous pouvez utiliser quelque chose comme:

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

Edit: Notez que pour que cela fonctionne, vous devrez remplacer correctement les méthodes equals () et hashCode () . Si vous utilisez Eclipse IDE, vous pouvez faire générer ces méthodes en ouvrant d'abord le fichier source de votre CurrentAccountobjet et en sélectionnantSource > Generate hashCode() and equals()...

GreenMatt
la source
9
La méthode equals () doit être remplacée dans CurrentAccount pour déterminer quand il s'agit du même objet
Javi
3
Dans ce cas, hashcode () doit également être remplacé. Par contrat hashcode (), les objets égaux doivent avoir des hashcodes égaux.
zockman
@zockman est sûr que vous avez raison, même si je pense que le remplacement d'égaux est encore plus important dans ce cas, car sinon un objet CurrentAccount peut ne pas être le même même lorsque tous leurs attributs ont la même valeur. Mais je suis d'accord pour remplacer hashcode () aussi.
Javi
Existe-t-il une version qui compare les références d'objets?
Tomáš Zato - Réintégrer Monica le
Salut, Est-il possible de vérifier la liste si elle contient "Alberto Carlos"?
Jesse
47

Mieux vaut utiliser a HashSetque an ArrayListlorsque vous vérifiez l'existence d'une valeur. Documentation Java pour HashSetdit:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() Vous devrez peut-être parcourir toute la liste pour trouver l'instance que vous recherchez.

SBA
la source
16

Veuillez vous référer à ma réponse sur ce post .

Il n'est pas nécessaire d'itérer sur Listla equalsméthode juste d'écraser .

Utiliser à la equalsplace 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;
}

Appelez ça comme ça:

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
la source
4
vous utilisez == pour comparer des chaînes
Mightian
2
Vous devriez utiliser equals () au lieu de == pour comparer des chaînesthis.name.equals(employee.getName())
Chanceux
1
a sauvé ma vie, mon frère pourrait t'acheter une bière ou deux rn :)
Kennedy Kambo
10

Nous pouvons utiliser la containsméthode pour vérifier si un élément existe si nous avons fourni l'implémentation de equalset hashCodesinon la référence d'objet sera utilisée pour la comparaison d'égalité. En outre , en cas d'une liste containsest O(n)opération où comme il est O(1)pour HashSetsi préférable d'utiliser plus tard. Dans Java 8, nous pouvons également utiliser des flux pour vérifier l'élément en fonction de son égalité ou en fonction d'une propriété spécifique.

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
la source
merci pour cette réponse incroyable en fait c'est un +1! J'ai utilisé cette partie du code: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);maintenant j'en ai besoin pour extraire cet élément! c'est possible ??
maryem neyli le
1
@maryemneyli utilise findAny: docs.oracle.com/javase/8/docs/api/java/util/stream/…
akhil_mittal
L'appel nécessite le niveau API 24 (le minimum actuel est de 19):java.util.Collection#stream
shirin le
2

Utilisez simplement .contains. Par exemple, si vous vérifiiez si une ArrayList arrcontient une valeur val, vous exécuteriez simplement arr.contains(val), ce qui renverrait un booléen représentant si la valeur est contenue. Pour plus d'informations, consultez la documentation de .contains.

codingpower472
la source
1

Lorsque Array List contient un objet de Primitive DataType.

Use this function:
arrayList.contains(value);

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

Lorsque Array List contient un objet de type de données défini par l'utilisateur.

Follow this below Link 

Comment comparer les attributs des objets dans un ArrayList?

J'espère que cette solution vous aidera. Merci

Aman Goyal
la source
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-load Testing Eng
la source