ArrayList'te bir değerin olup olmadığını kontrol edin


179

Tarayıcıda yazılan bir değerin bir tarayıcıda var olup olmadığını nasıl kontrol edebilirim 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();

Yanıtlar:


320

Sadece ArrayList.contains (desiredElement) kullanın . Örneğin, örneğinizden conta1 hesabını arıyorsanız, şöyle bir şey kullanabilirsiniz:

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

Düzenleme: Bunun çalışması için eşit olarak eşittir () ve hashCode () yöntemlerini geçersiz kılmanız gerekir . Eclipse IDE kullanıyorsanız, önce CurrentAccountnesneleriniz için kaynak dosyasını açıp seçerek bu yöntemleri oluşturabilirsiniz.Source > Generate hashCode() and equals()...


9
Aynı nesne olduklarını belirlemek için CurrentAccount'ta equals () yöntemi geçersiz kılınmalıdır
Javi

3
Bu durumda, hashcode () işlevinin de geçersiz kılınması gerekir. Her hashcode () sözleşmesi için eşit nesnelerin eşit hashcode'ları olmalıdır.
zockman

@zockman haklısınız, ancak bu durumda geçersiz kılmanın eşit olması daha da önemli olduğunu düşünüyorum, çünkü bir CurrentAccount nesnesi değilse tüm öznitelikleri aynı değere sahip olsa bile aynı olmayabilir. Ama ben hashcode () geçersiz kılmayı kabul ediyorum.
Javi

Nesne referanslarını karşılaştıran bir sürüm var mı?
Tomáš Zato - Monica'yı

Merhaba, "Alberto Carlos" içeriyorsa listeyi kontrol etmek mümkün müdür?
Jesse

47

Daha iyi bir kullanımı HashSetbir daha ArrayListbir değerin var olup olmadığını kontrol ederken eklenir. Java dokümanları HashSetdiyor ki:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() aradığınız örneği bulmak için tüm listeyi yinelemeniz gerekebilir.


16

Lütfen bu yazıdaki cevabıma bakın .

ListSadece üzerine yazma equalsyöntemini yinelemeye gerek yoktur .

Yerine equalskullanın==

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

Buna şöyle deyin:

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
karşılaştırmak için == kullanıyorsunuz
Mightian

2
Dizeleri karşılaştırmak için == yerine equals () kullanmalısınızthis.name.equals(employee.getName())
Lucky

1
hayatımı kurtardı. bir bira ya da iki rn satın alabilirim :)
Kennedy Kambo

10

Kullanabiliriz containsBir öğenin varlığını sağlayıp sağlamadığımızı kontrol etmek yöntemequals ve hashCodeaksi takdirde eşitlik karşılaştırması için nesne referansı kullanılacaktır. Ayrıca bir liste halinde containsolduğu O(n)olduğu gibi operasyon O(1)için HashSetbu kadar iyi sonra kullanmak için. Java 8'de, öğeyi eşitliğine veya belirli bir özelliğe göre kontrol etmek için akışları da kullanabiliriz.

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

Bu şaşırtıcı cevap için teşekkür ederim aslında bir +1! Kodun bu bölümünü kullandım: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);şimdi bu öğeyi çıkarmak için ihtiyacım var! mümkün mü ??
maryem neyli


Çağrı, API düzey 24 gerektirir (şu anki dakika 19'dur):java.util.Collection#stream
shirin

2

Sadece kullan .contains. Örneğin, bir ArrayList öğesinin arrbir değer içerip içermediğini kontrol ediyorsanız val, basitçe arr.contains(val)çalışırsınız; bu değer içeriyorsa temsil eden bir boole döndürür. Daha fazla bilgi için dokümanlarına bakın .contains.



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");         
        }
    } 
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.