Faço select na base de dados das colunas Codigo e Data2, o retorno será uma lista.
Devo verificar se os valores desses campos existem na arquivo texto linha por linha se todas as informações que estão na lista do banco não existirem no arquivo texto devo lançar uma exception.
É uma interseção todos os dados da listaBanco devem existir na listaArquivo.
Pensei em algo do tipo:
//informações que estiverem nas duas lista insiro no bancoCollectionlistaPersistir=dao.getLista();CollectionlistaBanco=newArrayList();CollectionlistaArquivoTexto=reader.getLista();for(IteratoriterBanco=listaBanco.iterator();iterBanco.hasNext();){PrecoMercadoMoedaVOmoedaVO=(PrecoMercadoMoedaVO)iterBanco.next();a:for(IteratoriterTexto=listaArquivoTexto.iterator();iterTexto.hasNext();){PrecoMercadoMoedaVOmoedaVO2=(PrecoMercadoMoedaVO)iterTexto.next();if((moedaVO.getCodMoeda()==moedaVO2.getCodMoeda())&&(moedaVO.getDatCotacao().equals(moedaVO2.getDatCotacao()))){listaPersistir.add(moedaVO2);breaka;}//em que momento lanço a exception se os dados da listaBanco não existir na listaArquivoTexto ?}}
Se você olhar o fonte de “retainAll” (união) e “removeAll” (intersecção) nos fontes de java.util.Set, java.util.SortedSet ou java.util.HashSet (não sei em qual deles achar - é questão de dar uma olhada) vai ver que não é assim tão diferente.
E é por isso que eu não insisti muito para você mudar sua implementação. Se as duas listas forem suficientemente pequenas (menos de 10 elementos cada), fazer isso que você fez não é tão mais lento que usar Sets e implementar uma versão de “equals” e “hashCode” apropriada.
(Eu sou mais preguiçoso ainda, e se eu é que fosse fazer isso, usaria SortedSets (como TreeSet) e uma classe que implementa Comparator, para poder comparar dois Beans. )
Z
zezinho
thingol:
E é por isso que eu não insisti muito para você mudar sua implementação. Se as duas listas forem suficientemente pequenas (menos de 10 elementos cada), fazer isso que você fez não é tão mais lento que usar Sets e implementar uma versão de “equals” e “hashCode” apropriada.
(Eu sou mais preguiçoso ainda, e se eu é que fosse fazer isso, usaria SortedSets (como TreeSet) e uma classe que implementa Comparator, para poder comparar dois Beans. )
thingol vc implementaria o método compare da interface Comparator?
A lógica do seu método seria bem parecido com o que eu estou fazendo…certo ?
T
thingol
Vamos lá.
classPrecoMercadoMoedaVO{publicintgetCodMoeda(){...}publicDategetDatCotacao(){...}}/* Você pode ter vários comparators, por isso é que não fiz * PrecoMercadoMoedaVO implementar Comparable */classComparatorPrecoMercadoMoeda1implementsComparator<PrecoMercadoMoedaVO>{publicintcompare(PrecoMercadoMoedaVOp1,PrecoMercadoMoedaVOp2){// ordene pelo código e a seguir pela cotação// isto fica como exercício. Só você lembrar-se que:// se o código e a data da cotação baterem, retorne 0// se o código bater, considere a data (para facilitar use o próprio "compareTo")// se o código não bater, considere o código (para facilitar, subtraia um do outro, como: return p1.getCodMoeda() - p2.getCodMoeda());}}...SortedSet<PrecoMercadoMoedaVO>s1=newTreeSet<PrecoMercadoMoedaVO>(newComparatorPrecoMercadoMoeda1());SortedSet<PrecoMercadoMoedaVO>s2=newTreeSet<PrecoMercadoMoedaVO>(newComparatorPrecoMercadoMoeda1());...achoquevocêdeveterentendidooquefazer.
Z
zezinho
thingol, ficou claro.
Valeu…
Só me resta saber agora qual solução é mais rápida…
vou testar…
Z
zezinho
thingol
// se o código bater, considere a data (para facilitar use o próprio “compareTo”)
// se o código não bater, considere o código (para facilitar, subtraia um do outro, como: return p1.getCodMoeda() - p2.getCodMoeda());
na verdade eu tenho que validar os dois. Forma se não me engano estou verificando um por um, e preciso verificar todos da listaBanco com os da listaTxt. E caso todas as informações da listaBanco não exstirem no listaTxt tenho que lançar um erro.