Tenho uma aplicação que possui um campo (matrícula do funcionário) em uma tabela que aponta para um arquivo de fotografia (ex. 238876.jpg). Vou percorrer um resultset com todas as matrículas e ver que funcionários não possuem fotos (posteriormente vice-versa, ou seja, que fotos não possuem funcionários).
Qual a melhor opção para guardar os nomes dos arquivos e depois buscá-los indexados pelo próprio nome?
Voce vai pegar todos os dados e manipular via codigo Java? se for isso, pq vc simplesmente nao faz isso diretamente na query? Tipo, uma query para pegar todos sem foto e outra para fotos sem funcionario. Algo como
Assim vc nao precisa ficar iterando pelo ResultSet.
Rafael
kuchma
Voce quer uma colecao que seja ordenada? Os valores sao String, certo? Da pra usar uma implementacao de List (ArrayList, p.ex.), e depois fazer um Collections.sort(). Ou entao usar uma colecao que seja ordenada por padrao (TreeSet, TreeMap, p.ex.). Ou ainda fazer um ORDER BY na consulta e jogar numa List o conteudo ja ordenado.
Marcio Kuchma
O
oswaldo
Desde já obrigado pelo retorno pessoal.
Rafael, provavelmente não me expliquei direito. Eu não tenho nenhum campo no banco indicando se existe foto ou não. O que eu preciso fazer é:
Para cada matricula recuperada via recordset (que pode até ser ordenado) verificar em um diretório se o arquivo [matricula].jpg existe.
Márcio, suas dicas são legais mas como exatamente eu faço a pesquisa com o nome do arquivo, ou seja, [matricula.jpg] no treeset?
Além de tudo isto, imagino que uma possibilidade seria utilizar a classe File e testar a existência com o exists() mas acredito Vocês tenham uma solução mais eficaz e elegante.
Novamente muito obrigado.
Abraços
kuchma
Acho que agora entendi… voce tem uma lista de matriculas e um diretorios com arquivos JPG (p.ex)… entao voce quer ver que matriculas tem JPG correspondente - certo?
Pesquise as matriculas, jogue num Set. Leia a lista de arquivos do diretorio de imagens e jogue em outro Set. Entao use operacoes como removeAll() e retainAll() para obter elementos que estao em um conjunto, mas nao no outro, e vice-versa.
Marcio Kuchma
O
oswaldo
Obrigado Márcio
Estou usando 2 ArrayList para esta comparação mas acredito que a sua sugestão de Collection, por apresentar os métodos que Você citou, seja mais adequada.
Sei que não é bom pedir para incluir pedaços de código para não nos tornarmos preguiçosos, mas neste caso a Collection é realmente novidade para mim.
Existe a possibilidade de apresentar algum código da Collection por mais simples que seja?
Desde já obrigado
Abraços
Guilherme_Silveira
Collectionc=newArrayList();
De uma olhada no capitulo de collections na apostila 11 do site www.caelum.com.br
att
O
oswaldo
Valeu pela ajuda Guilherme
Abraços
kuchma
Nao testei…
SetnameSet=newHashSet();SetimageSet=newHashSet();Stringextension=".jpg";// obtenha as matriculas reais da fonte de dadosnameSet.add("123"+extension);nameSet.add("456"+extension);nameSet.add("789"+extension);// obtenha os nomes dos arquivos reais do filesystemfileSet.add("123.jpg");fileSet.add("456.jpg");fileSet.add("a.jpg");// nesse ponto nameSet.retainAll(fileSet) fara com que fique em // nameSet apenas as matriculas que tem arquivo associado e vice-versa
Não testei, mas vou testar. Só pela ajuda já me valeu muito.
Juro que não vou ficar mal-acostumado.
Obrigado de novo…
Guilherme_Silveira
kuchma:
Nao testei…
SetnameSet=newHashSet();SetimageSet=newHashSet();Stringextension=".jpg";// obtenha as matriculas reais da fonte de dadosnameSet.add("123"+extension);nameSet.add("456"+extension);nameSet.add("789"+extension);// obtenha os nomes dos arquivos reais do filesystemfileSet.add("123.jpg");fileSet.add("456.jpg");fileSet.add("a.jpg");// nesse ponto nameSet.retainAll(fileSet) fara com que fique em // nameSet apenas as matriculas que tem arquivo associado e vice-versa
Muito cuidado com polimorfismo quando for usar o metodo retainAll
No caso voce esta se referenciando a um set e deve saber que nem todo set implementa tal metodo (horrendo).
Portanto nesses casos eh melhor pedir a referencia a algum set que implementa tal metodo ou construir voce mesmo a partir de uma collection tal set: