Sprawdź, czy wartość istnieje w ArrayList


179

Jak mogę sprawdzić, czy wartość, co jest napisane w skanerze istnieje w 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();

Odpowiedzi:


320

Wystarczy użyć ArrayList.contains (pożądany element) . Na przykład, jeśli szukasz konta conta1 ze swojego przykładu, możesz użyć czegoś takiego:

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

Edycja: Pamiętaj, że aby to zadziałało, musisz poprawnie zastąpić metody equals () i hashCode () . Jeśli używasz środowiska Eclipse IDE, możesz wygenerować te metody, otwierając najpierw plik źródłowy dla swojego CurrentAccountobiektu i wybierającSource > Generate hashCode() and equals()...


9
Metoda equals () powinna zostać przesłonięta w CurrentAccount, aby określić, kiedy są one tym samym obiektem
Javi

3
W takim przypadku należy również przesłonić hashcode (). Zgodnie z umową hashcode () równe obiekty muszą mieć jednakowe kody skrótu.
zockman,

@zockman na pewno masz rację, chociaż myślę, że zastąpienie równości jest w tym przypadku jeszcze ważniejsze, ponieważ jeśli nie, obiekt CurrentAccount może nie być taki sam, nawet jeśli wszystkie ich atrybuty mają tę samą wartość. Ale zgadzam się również na zastąpienie hashcode ().
Javi,

Czy istnieje wersja, która porównuje odwołania do obiektów?
Tomáš Zato - Przywróć Monikę

Cześć, Czy można sprawdzić listę, jeśli zawiera „Alberto Carlos”?
Jesse

47

Lepiej używać HashSetniż ArrayListwtedy, gdy sprawdzasz, czy istnieje wartość. Dokumentacja Java dla HashSetmówi:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() być może będziesz musiał iterować całą listę, aby znaleźć instancję, której szukasz.


16

Proszę odnieść się do mojej odpowiedzi w tym poście .

Nie ma potrzeby powtarzania Listsamej equalsmetody nadpisania .

Użyj equalszamiast==

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

Nazwij to tak:

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
używasz == do porównywania ciągów
Mightian

2
Powinieneś użyć equals () zamiast ==, aby porównać ciągi znakówthis.name.equals(employee.getName())
Lucky

1
uratowałem moje życie bracie. mógłbym kupić ci piwo lub dwa rn :)
Kennedy Kambo

10

Możemy użyć containsmetody, aby sprawdzić, czy element istnieje, jeśli zapewniliśmy implementację, equalsa hashCodeodniesienie do obiektu zostanie użyte do porównania równości. Również w przypadku listy containsjest O(n)operacja, gdzie, jak to jest O(1)dla HashSettak lepiej użyć później. W Javie 8 możemy używać strumieni również do sprawdzania elementu na podstawie jego równości lub na podstawie określonej właściwości.

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

dziękuję za tę niesamowitą odpowiedź, w rzeczywistości jest to +1! Użyłem tej części kodu: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);teraz potrzebuję go do wyodrębnienia tego elementu! Czy to możliwe ??
maryem neyli


Połączenie wymaga interfejsu API na poziomie 24 (bieżąca min to 19):java.util.Collection#stream
shirin

2

Po prostu użyj .contains. Na przykład, jeśli sprawdzałeś, czy ArrayList arrzawiera wartość val, po prostu uruchomisz arr.contains(val), co zwróci wartość logiczną reprezentującą, czy wartość jest zawarta. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją dotyczącą .contains.


1

Gdy lista tablic zawiera obiekt Primitive DataType.

Use this function:
arrayList.contains(value);

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

Gdy lista tablic zawiera obiekt UserDefined DataType.

Follow this below Link 

Jak porównać atrybuty Objects w ArrayList?

Mam nadzieję, że to rozwiązanie ci pomoże. Dzięki


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");         
        }
    } 
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.