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();
daniel__
źródło
1
Rozwiązanie Java 8: stackoverflow.com/a/51837794/1216775
akhil_mittal

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

GreenMatt
źródło
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.

SBA
źródło
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));

}
Sameer Kazi
źródło
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
akhil_mittal
źródło
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
1
@maryemneyli use findAny: docs.oracle.com/javase/8/docs/api/java/util/stream/…
akhil_mittal
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.

codingpower472
źródło
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

Aman Goyal
źródło
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
źródło