Pesquisa em uma lista [RESOLVIDO]

8 respostas
gilvanandre

Boa tarde.

Gostaria de saber se há uma maneira de fazer uma pesquisa em um ArrayList através da descrição dos objetos, como se fosse utilizar um “LIKE” no BD.
Tenho que fazer isso diretamente em uma lista pois os dados são temporários.

Por exemplo:
Objeto Produto contem a propriedade descrição, portanto crio uma lista de produtos e tenho que pesquisar por eles na lista através da descrição;

A alguma maneira de fazer isso?
Obrigado

8 Respostas

robson.souza1990

não sei se entendi o que vc quer fazer…

SeuObjeto objetoDaBusca;
for(int i=0; SuaLista.size()>i; i++){
SeuObjeto objeto = Sualista.get(i);
if(objeto.getAtributo.equals(objetoDaBusca.getAtributo)){

//Suas instruções.
}

}
gilvanandre

Vou tentar explicar melhor.

O minha lista possui os seguintes objetos.

MANGUEIRA LINHA NAN 2"
MANGUEIRA LINHA NAN 3"
MANGUEIRA LINHA SUCÇÃO PESADA 5"

Mas esses dados são temporários, se fosse feita uma busca através de um banco de dados eu faria através de um LIKE, que tem como função comparar pastes da String e mostrar todos os objetos que possuem essa parte. Portanto, visando o caso acima e buscando diretamente na lista pela palavra chave “NAN” deveria me retornar os objetos cuja a descrição possui NAN.
ex:

MANGUEIRA LINHA NAN 2"
MANGUEIRA LINHA NAN 3"

É basicamente disso que eu preciso!

guilherme.dio

Entendi, você quer algo parecido com o LINQ do C#…

Mas eu acredito que o java não tenha nada pronto que forneça suporte a pesquisa em Collections.
Talvez se você pesquisar encontre algum projeto para isso no github ou no sourceforge.

F

Usa o método contains();

String busca = "NAN";
for (Produto prod : suaLista) {
  if (prod.getDescricao().contains(busca)) {
    // Faz o que vc quer
  }
}

Isso não resolve?

guilherme.dio

felipeaps:
Usa o método contains();

String busca = "NAN";
for (Produto prod : suaLista) {
  if (prod.getDescricao().contains(busca)) {
    // Faz o que vc quer
  }
}

Isso não resolve?

Isso obviamente não ira funcionar para ele, porque a implementação do método Contains irá invocar o método Equals da classe Object que por sua vez verifica se os atributos(caso tenha sido sobreescrita nas classes inferiores) são identicos e não PARECIDOS, que é o que ele precisa.

gilvanandre

guilherme.dio:
felipeaps:
Usa o método contains();

String busca = "NAN";
for (Produto prod : suaLista) {
  if (prod.getDescricao().contains(busca)) {
    // Faz o que vc quer
  }
}

Isso não resolve?

Isso obviamente não ira funcionar para ele, porque a implementação do método Contains irá invocar o método Equals da classe Object que por sua vez verifica se os atributos(caso tenha sido sobreescrita nas classes inferiores) são identicos e não PARECIDOS, que é o que ele precisa.

Exatamente… não vai me servir por causa disso!
ele compara com o metodo Equals… e eu preciso apenas comparar as partes! Como se fosse um bom e velho Bubble-Sort! Mas que seja mais rápido pois é uma pesquisa que deve ocorrer em tempo quase que real!

F

guilherme.dio:
felipeaps:
Usa o método contains();

String busca = "NAN";
for (Produto prod : suaLista) {
  if (prod.getDescricao().contains(busca)) {
    // Faz o que vc quer
  }
}

Isso não resolve?

Isso obviamente não ira funcionar para ele, porque a implementação do método Contains irá invocar o método Equals da classe Object que por sua vez verifica se os atributos(caso tenha sido sobreescrita nas classes inferiores) são identicos e não PARECIDOS, que é o que ele precisa.

Para mim prod.getDescricao() retorna uma String, portanto utilizo o contains() da classe String, não o contains da collection.

gilvanandre

felipeaps:
guilherme.dio:
felipeaps:
Usa o método contains();

String busca = "NAN";
for (Produto prod : suaLista) {
  if (prod.getDescricao().contains(busca)) {
    // Faz o que vc quer
  }
}

Isso não resolve?

Isso obviamente não ira funcionar para ele, porque a implementação do método Contains irá invocar o método Equals da classe Object que por sua vez verifica se os atributos(caso tenha sido sobreescrita nas classes inferiores) são identicos e não PARECIDOS, que é o que ele precisa.

Para mim prod.getDescricao() retorna uma String, portanto utilizo o contains() da classe String, não o contains da collection.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Funcionou essa merda!
kkkkkkkkkkkkkkkkkkkkkkkkkkkk

Vlw pela dica ai!
Mas mesmo assim, se tiver algo que seja mais rápido melhor!
Obrigado

Criado 23 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 8
Participantes 4