Перевірте, чи існує значення у 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 (desireElement) . Наприклад, якщо ви шукаєте обліковий запис conta1 зі свого прикладу, ви можете використовувати щось на зразок:

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

Редагувати: Зауважте, що для цього вам потрібно буде належним чином замінити методи equals () та hashCode () . Якщо ви використовуєте IDE Eclipse, ви можете створити ці методи, спершу відкривши вихідний файл для вашого CurrentAccountоб'єкта та вибравшиSource > Generate hashCode() and equals()...


9
метод equals () повинен бути скасований у CurrentAccount, щоб визначити, коли вони є одним і тим же об'єктом
Javi

3
У такому випадку також потрібно відмінити хеш-код (). За контрактом хеш-коду () рівні об'єкти повинні мати рівні хеш-коди.
zockman

@zockman впевнений, що ти маєш рацію, хоча я вважаю, що переосмислення рівнянь є ще важливішим у цьому випадку, оскільки якщо ні, то об'єкт CurrentAccount може бути не однаковим, навіть коли всі їх атрибути мають однакове значення. Але я згоден і в переосмисленні хеш-коду ().
Хаві

Чи існує версія, яка порівнює об'єктні відношення?
Томаш Зато - Відновіть Моніку

Привіт, чи можна перевірити список, якщо він містить "Альберто Карлос"?
Джессі

47

Краще використовувати значення a, HashSetніж ArrayListколи ви перевіряєте наявність значення. Документи 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
врятувало мені життя.Були купити тобі пиво-два р-н :)
Кеннеді Камбо

10

Ми можемо використовувати containsметод, щоб перевірити, чи існує елемент, якщо ми забезпечили реалізацію equalsта hashCodeінше посилання на об'єкт буде використовуватися для порівняння рівності. Крім того, в разі списку containsє O(n)операція , де , як це O(1)для HashSetтак краще , щоб використовувати пізніше. У Java 8 ми можемо використовувати потоки також для перевірки елемента на основі його рівності або на основі конкретної властивості.

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

дякую за цю дивовижну відповідь, адже це +1! Я використав цю частину коду: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);тепер мені потрібна, щоб витягти цей елемент! Це можливо ??
maryem neyli


Для дзвінка потрібен рівень 24 API (поточний хв. 19):java.util.Collection#stream
ширін

2

Просто використовуйте .contains. Наприклад, якщо ви перевіряли, чи arrмістить ArrayList значення 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");         
        }
    } 
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.