Verifique se existe um valor em ArrayList

179

Como posso verificar se existe um valor escrito no scanner em um arquivo 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__
fonte
1
Solução Java 8: stackoverflow.com/a/51837794/1216775
akhil_mittal

Respostas:

320

Basta usar ArrayList.contains (desejadoElement) . Por exemplo, se você estiver procurando a conta conta1 do seu exemplo, poderá usar algo como:

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

Edit: Observe que, para que isso funcione, você precisará substituir adequadamente os métodos equals () e hashCode () . Se você estiver usando o Eclipse IDE, poderá gerar esses métodos abrindo primeiro o arquivo de origem do seu CurrentAccountobjeto e selecionandoSource > Generate hashCode() and equals()...

GreenMatt
fonte
9
equals () método deve ser substituído em CurrentAccount para determinar quando eles são o mesmo objeto
Javi
3
Nesse caso, o hashcode () também precisa ser substituído. Por contrato hashcode (), objetos iguais devem ter códigos de hash iguais.
Zockman
@ zockman, você está certo, embora eu ache que a substituição de iguais seja ainda mais importante neste caso, porque, se não for um objeto CurrentAccount, pode não ser o mesmo, mesmo quando todos os seus atributos tiverem o mesmo valor. Mas concordo em substituir o hashcode () também.
Javi
Existe uma versão que compara referências de objeto?
Tomáš Zato - Restabelece Monica
Olá, É possível verificar a lista se ela contém "Alberto Carlos"?
Jesse
47

É melhor usar a HashSetque a ArrayListquando você está verificando a existência de um valor. Os documentos Java para HashSetdiz:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() pode ser necessário repetir a lista inteira para encontrar a instância que você está procurando.

SBA
fonte
16

Por favor, consulte a minha resposta neste post .

Não há necessidade de iterar sobre Listapenas substituir o equalsmétodo.

Use em equalsvez de==

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

Chame assim:

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
fonte
4
você está usando == para comparar seqüências de caracteres
Mightian
2
Você deve usar equals () em vez de == para comparar stringsthis.name.equals(employee.getName())
Sorte
1
salvou minha vida bro.could comprar uma cerveja ou duas rn :)
Kennedy Kambo
10

Podemos usar o containsmétodo para verificar se um item existe, se tivermos fornecido a implementação equalse hashCode, em seguida, a referência do objeto será usada para comparação de igualdade. Também no caso de uma lista containsé O(n)operação onde como é O(1)para HashSetassim melhor usar mais tarde. No Java 8, podemos usar fluxos também para verificar o item com base em sua igualdade ou em uma propriedade específica.

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
fonte
obrigado por esta resposta incrível, na verdade, é um +1! Usei esta parte do código: boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);agora preciso extrair esse item! é possível ??
maryem neyli 15/06
1
@maryemneyli use findAny: docs.oracle.com/javase/8/docs/api/java/util/stream/…
akhil_mittal
A chamada requer o nível 24 da API (o min atual é 19):java.util.Collection#stream
shirin 04/07
2

Apenas use .contains. Por exemplo, se você estivesse verificando se um ArrayList arrcontém um valor val, você simplesmente executaria arr.contains(val), o que retornaria um booleano representando se o valor estivesse contido. Para mais informações, consulte os documentos para .contains.

codingpower472
fonte
1

Quando Array List contém o objeto Primitive DataType.

Use this function:
arrayList.contains(value);

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

Quando a Lista de matrizes contém o objeto DataType definido pelo usuário.

Follow this below Link 

Como comparar atributos de objetos em um ArrayList?

Espero que esta solução o ajude. obrigado

Aman Goyal
fonte
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-loading Teste de Eng
fonte