Periksa apakah ada nilai di ArrayList

179

Bagaimana saya bisa mengecek apakah ada nilai yang tertulis dalam pemindai di 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__
sumber
1
Solusi Java 8: stackoverflow.com/a/51837794/1216775
akhil_mittal

Jawaban:

320

Cukup gunakan ArrayList.contains (diinginkanElement) . Misalnya, jika Anda mencari akun conta1 dari contoh Anda, Anda dapat menggunakan sesuatu seperti:

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

Sunting: Perhatikan bahwa agar ini berfungsi, Anda harus mengganti metode equals () dan hashCode () dengan benar . Jika Anda menggunakan Eclipse IDE, maka Anda dapat membuat metode ini dihasilkan dengan terlebih dahulu membuka file sumber untuk CurrentAccountobjek Anda dan memilihSource > Generate hashCode() and equals()...

GreenMatt
sumber
9
metode equals () harus diganti dalam CurrentAccount untuk menentukan kapan mereka adalah objek yang sama
Javi
3
Dalam hal ini kode hash () perlu diganti juga. Per kode hash () mengontrak objek yang sama harus memiliki kode hash yang sama.
zockman
@zockman yakin Anda benar, meskipun saya pikir sama dengan menimpa bahkan lebih penting dalam kasus ini karena jika bukan objek CurrentAccount mungkin tidak sama bahkan ketika semua atribut mereka memiliki nilai yang sama. Tapi saya setuju dalam menimpa kode hash () juga.
Javi
Apakah ada versi yang membandingkan referensi objek?
Tomáš Zato - Reinstate Monica
Hai, Apakah mungkin untuk memeriksa daftar jika mengandung "Alberto Carlos"?
Jesse
47

Lebih baik menggunakan a HashSetdaripada ArrayListketika Anda memeriksa keberadaan suatu nilai. Java docs for HashSetmengatakan:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() mungkin harus mengulangi seluruh daftar untuk menemukan contoh yang Anda cari.

SBA
sumber
16

Silakan merujuk jawaban saya di posting ini .

Tidak perlu mengulangi Listhanya menimpa equalsmetode.

Gunakan equalssebagai ganti==

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

Sebut saja seperti ini:

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
sumber
4
Anda menggunakan == untuk membandingkan string
Mightian
2
Anda harus menggunakan equals () daripada == untuk membandingkan stringthis.name.equals(employee.getName())
Lucky
1
menyelamatkan hidupku bro. Aku bisa membelikanmu satu atau dua bir :)
Kennedy Kambo
10

Kami dapat menggunakan containsmetode untuk memeriksa apakah item ada jika kami telah menyediakan implementasi equalsdan hashCodereferensi objek lain akan digunakan untuk perbandingan kesetaraan. Juga dalam kasus daftar containsadalah O(n)operasi di mana karena itu O(1)untuk HashSetlebih baik digunakan nanti. Di Java 8 kita bisa menggunakan stream juga untuk memeriksa item berdasarkan kesetaraannya atau berdasarkan properti tertentu.

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
sumber
terima kasih atas jawaban yang luar biasa ini sebenarnya adalah +1! Saya menggunakan bagian kode ini: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);sekarang saya membutuhkannya untuk mengekstrak item itu! apa itu mungkin ??
maryem neyli
1
@maryemneyli gunakan findAny: docs.oracle.com/javase/8/docs/api/java/util/stream/…
akhil_mittal
Panggilan membutuhkan API level 24 (min saat ini adalah 19):java.util.Collection#stream
shirin
2

Gunakan saja .contains. Misalnya, jika Anda memeriksa apakah ArrayList arrberisi nilai val, Anda hanya akan menjalankan arr.contains(val), yang akan mengembalikan boolean yang mewakili jika nilai tersebut terkandung. Untuk informasi lebih lanjut, lihat dokumen untuk .contains.

codingpower472
sumber
1

Ketika Daftar Array berisi objek tipe data primitif.

Use this function:
arrayList.contains(value);

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

Ketika Daftar Array berisi objek dari DataType UserDefined.

Follow this below Link 

Bagaimana cara membandingkan atribut Objek dalam ArrayList?

Saya harap solusi ini akan membantu Anda. Terima kasih

Aman Goyal
sumber
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
sumber