ตรวจสอบว่ามีค่าอยู่ใน 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();

1
โซลูชัน Java 8: stackoverflow.com/a/51837794/1216775
akhil_mittal

คำตอบ:


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 () จะต้องถูกเขียนทับเช่นกัน วัตถุที่เท่าเทียมกันต่อสัญญา () ต่อสัญญาจะต้องมีแฮชโค้ดที่เท่ากัน
zockman

@zockman แน่ใจว่าคุณพูดถูก แต่ฉันคิดว่าการเอาชนะนั้นมีความสำคัญมากกว่าในกรณีนี้เพราะถ้าไม่ใช่วัตถุ CurrentAccount อาจไม่เหมือนกันแม้ว่าคุณลักษณะทั้งหมดของพวกเขาจะมีค่าเท่ากันก็ตาม แต่ฉันก็เห็นด้วยในการเอาชนะ hashcode () ด้วย
Javi

มีรุ่นที่เปรียบเทียบการอ้างอิงวัตถุหรือไม่
Tomáš Zato - Reinstate Monica

สวัสดีเป็นไปได้ไหมที่จะตรวจสอบรายชื่อถ้ามี "Alberto Carlos" อยู่ด้วย?
เจสซี

47

ดีกว่าการใช้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
คุณควรใช้เท่ากับ () แทน == เพื่อเปรียบเทียบสตริงthis.name.equals(employee.getName())
Lucky

1
ช่วยชีวิตฉันไว้ bro.could ซื้อคุณเบียร์หรือสอง rn :)
เคนเนดี้ Kambo

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


การโทรต้องใช้ระดับ API 24 (นาทีปัจจุบันคือ 19):java.util.Collection#stream
shirin

2

.containsใช้เพียงแค่ ตัวอย่างเช่นหากคุณกำลังตรวจสอบว่า ArrayList arrมีค่าvalหรือไม่คุณก็จะเรียกใช้arr.contains(val)ซึ่งจะส่งคืนบูลีนที่แสดงว่ามีค่าอยู่หรือไม่ สำหรับข้อมูลเพิ่มเติมโปรดดูที่เอกสาร.containsสำหรับ


1

เมื่อ Array List มีวัตถุของ Primitive DataType

Use this function:
arrayList.contains(value);

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

เมื่อ Array List มีวัตถุของ UserDefined DataType

Follow this below Link 

วิธีการเปรียบเทียบคุณสมบัติของวัตถุใน ArrayList?

ฉันหวังว่าโซลูชันนี้จะช่วยคุณ ขอบคุณ


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.