ArrayList에 값이 있는지 확인하십시오.


179

스캐너에 기록 된 값이?에 있는지 어떻게 확인할 수 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();

답변:


320

ArrayList.contains (desiredElement) 만 사용하십시오 . 예를 들어, 예제에서 conta1 계정을 찾는 경우 다음과 같은 것을 사용할 수 있습니다.

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

편집 : 이것이 작동하려면 equals ()hashCode () 메소드 를 올바르게 재정의해야 합니다. Eclipse IDE를 사용하는 경우 먼저 CurrentAccount오브젝트 의 소스 파일을 열고 선택하여 이러한 메소드를 생성 할 수 있습니다.Source > Generate hashCode() and equals()...


9
equals () 메소드는 CurrentAccount에서 오버라이드되어 동일한 객체 일 때 결정됩니다.
Javi

3
이 경우 hashcode ()도 재정의해야합니다. hashcode () 계약에 따라 동일한 객체에는 동일한 해시 코드가 있어야합니다.
zockman

@zockman 당신이 옳다는 것을 확신하지만, CurrentAccount 객체가 같지 않은 경우 모든 속성이 동일한 값을 가질 때도 CurrentAccount 객체가 같지 않을 수 있기 때문에 equals를 재정의하는 것이 훨씬 중요하다고 생각합니다. 그러나 hashcode () 재정의에 동의합니다.
Javi

객체 참조를 비교하는 버전이 있습니까?
Tomáš Zato-복권 모니카

안녕하세요, "Alberto Carlos"가 포함되어 있으면 목록을 확인할 수 있습니까?
Jesse

47

값이 있는지 확인 HashSet하는 ArrayList경우 보다 a를 사용하는 것이 좋습니다. Java 문서에 HashSet따르면 :"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() 찾고있는 인스턴스를 찾기 위해 전체 목록을 반복해야 할 수도 있습니다.


16

이 게시물에 대한 내 답변을 참조하십시오 .

List방금 덮어 쓴 equals메소드 를 반복 할 필요가 없습니다 .

equals대신에 사용==

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

다음과 같이 호출하십시오.

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
==를 사용하여 문자열 비교
Mightian

2
문자열을 비교하려면 == 대신 equals ()를 사용해야합니다this.name.equals(employee.getName())
Lucky

1
내 생명을 구했습니다. 맥주를 사거나 두 번 구매할 수 있습니다 :)
Kennedy Kambo

10

우리가 사용할 수있는 contains우리가 구현 제공 한 경우 항목이 존재하는지 확인하는 방법 equalshashCode동등 비교를 위해 사용되는 다른 객체 참조. 또한 목록의 경우 contains입니다 O(n)그대로 작동 O(1)을 위해 HashSet매우 더 나은 나중에 사용하기는. Java 8에서는 스트림을 사용하여 항목의 동등성 또는 특정 속성을 기준으로 항목을 확인할 수도 있습니다.

자바 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

이 놀라운 답변에 감사드립니다. 실제로 그것은 +1입니다! 코드 의이 부분을 사용했습니다. boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);이제 해당 항목을 추출해야합니다! 가능합니까 ??
maryem neyli


호출에는 API 레벨 24가 필요합니다 (현재 최소 분은 19입니다)java.util.Collection#stream
shirin

2

그냥 사용하십시오 .contains. 예를 들어, ArrayList arr에 value가 포함되어 있는지 확인하는 경우 val간단히 실행 arr.contains(val)하면 값이 포함되어 있는지 여부를 나타내는 부울을 반환합니다. 자세한 내용은에 대한 문서 를 참조하십시오 .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");         
        }
    } 
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.