Kiểm tra nếu một giá trị tồn tại trong ArrayList


179

Làm cách nào để kiểm tra xem giá trị được ghi trong máy quét có tồn tại ArrayListkhông?

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

Câu trả lời:


320

Chỉ cần sử dụng ArrayList.contains (mong muốn) . Ví dụ: nếu bạn đang tìm tài khoản conta1 từ ví dụ của mình, bạn có thể sử dụng một cái gì đó như:

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

Chỉnh sửa: Lưu ý rằng để làm việc này, bạn sẽ cần ghi đè chính xác các phương thức equals ()hashCode () . Nếu bạn đang sử dụng IDE Eclipse, thì bạn có thể tạo các phương thức này bằng cách trước tiên mở tệp nguồn cho CurrentAccountđối tượng của bạn và chọnSource > Generate hashCode() and equals()...


9
Phương thức equals () nên được ghi đè trong CurrentAccount để xác định khi chúng là cùng một đối tượng
Javi

3
Trong trường hợp đó, hashcode () cũng cần được ghi đè. Mỗi mã băm () hợp đồng các đối tượng bằng nhau phải có mã băm bằng nhau.
zockman

@zockman chắc chắn rằng bạn đúng, mặc dù tôi nghĩ rằng việc ghi đè bằng thậm chí còn quan trọng hơn trong trường hợp này bởi vì nếu không phải là một đối tượng CurrentAccount có thể không giống nhau ngay cả khi tất cả các thuộc tính của chúng có cùng giá trị. Nhưng tôi cũng đồng ý trong việc ghi đè mã băm ().
Javi

Có một phiên bản so sánh giới thiệu đối tượng?
Tomáš Zato - Tái lập lại

Xin chào, Có thể kiểm tra danh sách nếu nó có chứa "Alberto Carlos" không?
Jesse

47

Sử dụng HashSettốt hơn là ArrayListkhi bạn đang kiểm tra sự tồn tại của một giá trị. Tài liệu Java cho HashSetbiết:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() có thể phải lặp lại toàn bộ danh sách để tìm phiên bản bạn đang tìm kiếm.


16

Hãy tham khảo câu trả lời của tôi về bài viết này .

Không cần phải lặp lại Listchỉ bằng cách ghi đè equalsphương thức.

Sử dụng equalsthay vì==

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

Gọi nó như thế này:

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
bạn đang sử dụng == để so sánh các chuỗi
Mightian

2
Bạn nên sử dụng bằng () thay vì == để so sánh chuỗithis.name.equals(employee.getName())
May mắn

1
đã cứu mạng tôi. Hãy mua cho bạn một hoặc hai cốc bia :)
Kennedy Kambo

10

Chúng ta có thể sử dụng containsphương pháp để kiểm tra xem một mục có tồn tại hay không nếu chúng ta đã cung cấp việc triển khai equalshashCodetham chiếu đối tượng khác sẽ được sử dụng để so sánh bằng. Ngoài ra trong trường hợp của một danh sáchcontainsO(n)hoạt động mà vì nó là O(1)cho HashSetnên tốt hơn để sử dụng sau này. Trong Java 8, chúng ta cũng có thể sử dụng các luồng để kiểm tra mục dựa trên sự bằng nhau của nó hoặc dựa trên một thuộc tính cụ thể.

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

cảm ơn bạn vì câu trả lời tuyệt vời này thực sự là +1! Tôi đã sử dụng phần này của mã: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);bây giờ tôi cần nó để giải nén mục đó! có thể không ??
maryem neyli


Cuộc gọi yêu cầu API cấp 24 (tối thiểu hiện tại là 19):java.util.Collection#stream
shirin

2

Chỉ cần sử dụng .contains. Ví dụ: nếu bạn đang kiểm tra xem một ArrayList arrcó chứa một giá trị hay không val, bạn chỉ cần chạy arr.contains(val), nó sẽ trả về một boolean đại diện nếu giá trị được chứa. Để biết thêm thông tin, xem các tài liệu cho .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");         
        }
    } 
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.