Pessoal estou com um problema de performance em meu sistema por motivo de uma comparação que faço em uma lista.
Eu tenho uma lista que é preenchida com valores que vem da base de dados. Éste é um ArrayList<SelectItem>.
Eu queria saber como que eu faço para verificar se um elemento SelectItem existe dentro da lista com o contais sem precizar de loop (que é o modo que estou fazendo agora que está lento pois na base tem MUITOS registros e são preenchidos na lista).
os meus códigos são similares a estes:
Preenche lista:
listItem.add(new SelectItem("CORPORAT","CORPORAT"));
for(InvE1TO r : listaInvE1TO) {
listItem.add(new SelectItem(r.getDesProjeto(),r.getDesProjeto()));
}
verifica se existe na lista:
//Faço esta verificação, pois se utilizar o .equals e o Desprojeto for nulo, causa erro de null pointer
if(this.getInvE1TO().getDesProjeto() != null){
for(SelectItem item : listItem){
if(this.getInvE1TO().getDesProjeto().equals(item.getValue().toString())){
projetoExiste = true;
}
}
// caso não exista o projeto na lista ele concatena com (Antigo)
if (projetoExiste == false){
this.getInvE1TO().setDesProjeto(this.getInvE1TO().getDesProjeto() + " (Antigo)");
}
}
deste modo que está acima funciona mas é lento pois ele varre a lista toda.
eu queria saber como posso customizar com um “contains(o)” para que eu possa deixar isto mais rápido.
eu tentei adicionar um break quando ele encontra o valor mas no caso de o valor procurado for o ultimo da lista ou não estiver na lista ele vai percorrer a lista toda da mesma maneira.
Agradeço desde já.