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()もオーバーライドする必要があります。hashcode()コントラクトごとに、等しいオブジェクトは等しいハッシュコードを持つ必要があります。
zockman

@zockmanあなたが正しいことを確認してください。ただし、この場合、すべての属性が同じ値であってもCurrentAccountオブジェクトが同じでない場合があるため、equalsをオーバーライドすることはさらに重要だと思います。しかし、私はhashcode()をオーバーライドすることにも同意します。
Javi

オブジェクトの参照を比較するバージョンはありますか?
トマーシュZato -復活モニカ

こんにちは、「アルベルトカルロス」が含まれている場合、リストをチェックすることはできますか?
Jesse

47

値の存在を確認HashSetするArrayListときは、anよりもaを使用する方が良いです。の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
私の命を救ったbro.couldあなたビールまたは2つのrnを購入することができます:)
ケネディ

10

containsメソッドを使用して、実装を提供した場合にアイテムが存在するかどうかを確認できます。それ以外の場合はequalshashCodeオブジェクト参照を使用して等価比較を行います。また、リストの場合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

配列リストにプリミティブデータタイプのオブジェクトが含まれている場合。

Use this function:
arrayList.contains(value);

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

配列リストに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.