Überprüfen Sie, ob in ArrayList ein Wert vorhanden ist

179

Wie kann ich überprüfen, ob ein im Scanner geschriebener Wert in einem vorhanden ist 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__
quelle
1
Java 8-Lösung: stackoverflow.com/a/51837794/1216775
akhil_mittal

Antworten:

319

Verwenden Sie einfach ArrayList.contains (gewünschtes Element) . Wenn Sie beispielsweise nach dem conta1-Konto in Ihrem Beispiel suchen, können Sie Folgendes verwenden:

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

Bearbeiten: Damit dies funktioniert, müssen Sie die Methoden equals () und hashCode () ordnungsgemäß überschreiben . Wenn Sie Eclipse IDE verwenden, können Sie diese Methoden generieren lassen, indem Sie zuerst die Quelldatei für Ihr CurrentAccountObjekt öffnen und auswählenSource > Generate hashCode() and equals()...

GreenMatt
quelle
9
Die Methode equals () sollte in CurrentAccount überschrieben werden, um festzustellen, wann sie dasselbe Objekt sind
Javi
3
In diesem Fall muss auch hashcode () überschrieben werden. Pro Hashcode () Vertrag müssen gleiche Objekte gleiche Hashcodes haben.
Zockman
@zockman sicher, dass Sie Recht haben, obwohl ich denke, dass das Überschreiben von Gleichen in diesem Fall noch wichtiger ist, da ein CurrentAccount-Objekt möglicherweise nicht dasselbe ist, selbst wenn alle Attribute denselben Wert haben. Aber ich bin auch damit einverstanden, Hashcode () zu überschreiben.
Javi
Gibt es eine Version, die Objektreferenzen vergleicht?
Tomáš Zato - Wiedereinsetzung Monica
Hallo, ist es möglich, die Liste zu überprüfen, wenn sie "Alberto Carlos" enthält?
Jesse
47

Verwenden Sie besser a HashSetals a, ArrayListwenn Sie prüfen, ob ein Wert vorhanden ist. Java-Dokumente für HashSetsagt:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() Möglicherweise muss die gesamte Liste durchlaufen werden, um die gesuchte Instanz zu finden.

SBA
quelle
16

Bitte beziehen Sie sich auf meine Antwort auf diesen Beitrag .

Es ist nicht erforderlich, Listdie equalsMethode einfach zu überschreiben .

Verwenden Sie equalsanstelle von==

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

Nennen Sie es so:

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
quelle
4
Sie verwenden ==, um Zeichenfolgen zu vergleichen
Mightian
2
Sie sollten equals () anstelle von == verwenden, um Zeichenfolgen zu vergleichenthis.name.equals(employee.getName())
Lucky
1
hat mir das Leben gerettet, Bruder. Könnte dir ein oder zwei Bier kaufen :)
Kennedy Kambo
10

Wir können verwenden containsMethode überprüfen , ob ein Element vorhanden ist, wenn wir die Umsetzung zur Verfügung gestellt haben equalsund hashCodeanderen Objektverweis für Gleichheitsvergleich verwendet werden. Auch im Falle einer Liste containshandelt O(n)es sich O(1)um eine Operation, bei HashSetder die spätere Verwendung besser ist. In Java 8 können wir Streams auch verwenden, um Elemente basierend auf ihrer Gleichheit oder basierend auf einer bestimmten Eigenschaft zu überprüfen.

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
quelle
Vielen Dank für diese erstaunliche Antwort, eigentlich ist es eine +1! Ich habe diesen Teil des Codes verwendet: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);Jetzt brauche ich ihn, um diesen Gegenstand zu extrahieren! ist es möglich ??
Maryem Neyli
1
@ Maryemneyli verwenden findAny: docs.oracle.com/javase/8/docs/api/java/util/stream/…
akhil_mittal
1

Wenn die Array-Liste ein Objekt vom Typ Primitive DataType enthält.

Use this function:
arrayList.contains(value);

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

Wenn die Array-Liste ein Objekt vom Typ UserDefined DataType enthält.

Follow this below Link 

Wie vergleiche ich Objektattribute in einer ArrayList?

Ich hoffe, diese Lösung wird Ihnen helfen. Vielen Dank

Aman Goyal
quelle
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-Lasten Prüfung Eng
quelle
1

Einfach benutzen .contains. Wenn Sie beispielsweise prüfen, ob eine ArrayList arreinen Wert enthält val, führen Sie einfach aus arr.contains(val), wodurch ein Boolescher Wert zurückgegeben wird, der angibt, ob der Wert enthalten ist. Weitere Informationen finden Sie in den Dokumenten für .contains.

Codierungskraft472
quelle