bem galera, esse é o meu primeiro post aqui, minha dúvida é a seguinte:
eu tenho um ArrayList que alimenta minha Table Model buscando dados em um banco de dados.
eu quero que quando o usuario digitar uma letra, por exemplo A, apareça todos os registros que comecem com a letra A.
Numa pesquisa SQL ficaria desse jeito : SELECT * FROM CLIENTE WHERE NOME LIKE A%;
Por exemplo, ja tenho o A e coloque um N e um D, fazendo “AND”, ae ele liste, por exemplo os nomes:
Anderson
Andreia
ai depois que eu digitar a próxima letra, por exemplo, o E (ANDE) ele liste o Cliente Anderson.
eu faço isso puxando em tempo real os Clientes com a clausula do Where do BD e alimentando o ArrayList, mas queria fazer isso só ordenando o ArrayList, para não usar
tantas pesquisas com o Banco de dados, para se possivel, nem usar o banco de dados para esse proposito de ordenação.
Se alguem poder me ajudar, seria de grande ajuda.
um abraço.
Cara fiz um método que retorna as ocorrencias da lista para uma dada palavra.
É só chama-lo a cada evento onkey, que ele trará a lista com os elementos que contém a palavra que você digitou.
Espero que seja isso:
public static List<String> retornarOcorrencias(List<String> lista, String word){
List<String> retorno = new ArrayList<String>();
for (String elemento : lista) {
if(elemento.contains(word)){
retorno.add(elemento);
}
}
return retorno;
}
[quote=riqueluz]Cara fiz um método que retorna as ocorrencias da lista para uma dada palavra.
É só chama-lo a cada evento onkey, que ele trará a lista com os elementos que contém a palavra que você digitou.
Espero que seja isso:
public static List<String> retornarOcorrencias(List<String> lista, String word){
List<String> retorno = new ArrayList<String>();
for (String elemento : lista) {
if(elemento.contains(word)){
retorno.add(elemento);
}
}
return retorno;
}
Abraços,[/quote]
Porque não resumir para uma linha o que você precisa?
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(6);
list.add(1);
list.add(10);
list.add(4);
list.add(10);
list.add(9);
list.add(7);
// repete o valor 10 3x
int frequency = Collections.frequency(list, new Integer(10));
System.out.println(frequency);
}
É claro que aqui tem mais porque quis demonstrar, mas é basicamente o uso do método frequency da Collections.
Certo?
Eu não conhecia esse método ai, mas creio que ele esteja querendo retornar a lista com os elementos que satisfaçam a busca.
Neste caso ai você só retorna quantos elementos de um mesmo valor existem.
Com o método frequency ele retornaria 0 no seguinte caso:
Collections.frequency(lista, "and");
E pelo que o cara pediu, ele gostaria de retornar todas as palavras que tivesse esta substring nela.
Eu não conhecia esse método ai, mas creio que ele esteja querendo retornar a lista com os elementos que satisfaçam a busca.
Neste caso ai você só retorna quantos elementos de um mesmo valor existem.
Com o método frequency ele retornaria 0 no seguinte caso:
Collections.frequency(lista, "and");
E pelo que o cara pediu, ele gostaria de retornar todas as palavras que tivesse esta substring nela.
Abs,[/quote]
Na realidade o objeto deve ser exatamente igual ao passado como parametro.
Li rapidamente e havia entendido que apenas precisa do número de ocorrências, mas ele precisa que contenha o valor e posteriormente, de um sort na lista.
Só alterar o seu método para antes de retornar a lista dar uma Collections.sort() na lista de retorno.
Como é uma String, é implicito o comparator.
Abraços.
galera, muito obrigado ae pelas respostas, a resposta de riqueluz clareou e muito como eu fazer,
só que esse método vai retornar qualquer um que tenho aquelas letras, e tentei outros métodos, mas infelizmente
para esse propósito eu achei mais simples fazer do jeito que estou fazendo com o WHERE do BD.
muito obrigado ae.
[quote=brenowbc]galera, muito obrigado ae pelas respostas, a resposta de riqueluz clareou e muito como eu fazer,
só que esse método vai retornar qualquer um que tenho aquelas letras, e tentei outros métodos, mas infelizmente
para esse propósito eu achei mais simples fazer do jeito que estou fazendo com o WHERE do BD.
muito obrigado ae.[/quote]
Breno, basta alterar o método.
Ele usa o “contains” da String, ou seja, se a string possui um conjunto de caracteres. Se queres que seja as primeiras letras, use o startWith().
Assim:
[code]public static List retornarOcorrencias(List lista, String word){
List retorno = new ArrayList();
justamente, eu utilizei isso, só que o problema vem quando eu apago. Por exemplo, eu digito e quando vou apagar
ele vai ter que fazer a pesquisa novamente no BD, porque pra manter o estado anterior, vou ter que criar arrayslist de outros
arraylists, ae é complicado. Ae achei mais simples do jeito que estava fazendo mesmo, mas muito obrigado pela dica,
concerteza servirá para outras ocasiões.
eu coloquei basicamente igual a ele postou, só que o problema éra que o método de busca não tinha um retorno, éra void,
ae eu populava o ArrayList diretamente, mas so mudei pra ter o retorno que nem ele disse ae, e coloquei para o ArrayList de preenchimento
buscar os dados com essa classe e preenche-lo.
tenta ae, e outra, implemente a propria TableModel, se não fica mais complicado rsrs.
um abraço