Tenho um diretório com N arquivos e após leitura e atribuição dos seus elementos tenho que compara pra verificar se existe arquivos duplicados dentro das listas atuais. Tentei fazer com Foreach, com Iterator mais acho que meu laço não está permitindo validar só os novos elementos, está varrendo todo o conteudo. Preciso da ajuda de vcs.
DECLARO
List<filipeta> ListaArqDelimita = new ArrayList<filipeta>();
INSTANCIO
for(; i < arquivos.length; i++){
ListaArqDelimita = new ArrayList<filipeta>();
LinhasConteundos = new ArrayList<String>();
ATRIBUO
fip01.setQtdTrans(linha[j].substring(610, 614));
fip01.setValor(Float.parseFloat(linha[j].substring(625, 632).replace(",", ".")));
fip01.setArquivo(linha[j].substring(633, 695));
ListaArqDelimita.add(fip01);
NO FINAL DE CADA ARQUIVO TENTO VALIDAR AS DUPLICIDADES.
for (int k = 0; k < ListaArqDelimita.size(); k++) {
for (filipeta comparaFilipeta : ListaArqDelimita) {
if (comparaFilipeta.getArquivo().equals(ListaArqDelimita.get(k).getArquivo())) {
comparaFilipeta.setArquivo(ListaArqDelimita.get(k).getArquivo());
comparaFilipeta.setServico(ListaArqDelimita.get(k).getServico());
comparaFilipeta.setValor(ListaArqDelimita.get(k).getValor());
comparaFilipeta.setCarro(ListaArqDelimita.get(k).getCarro());
ListaDuplicada.add(comparaFilipeta);
}
}
}
quando acabo de ler todos os arquivos tenho um numero fora do real
Olá, Primeiro: Cria o List tipado: List e procure não usar genérico a menos que realmente precise. Segundo, sobre comparar duas listas, vc pode usar os métodos retainAll ou removeAll do List para manter só os iguais ou manter só os diferentes na lista. Ex: ListaArqDelimita.retainAll(LinhasConteundos);
como vou saber se o get.arquivo() é igual a da outra lista !!! desculpe minha ignorância é que não consigo implementar o que eu não entendo … kkkkkkkkkkkk
@Clowbr15, o que o @Rodrigo_Void está tentando te dizer é que não é preciso realizar a comparação, quando se utiliza o método removeAll, por exemplo.
O único ponto que ele esqueceu é que os métodos removeAll e retainAll precisam que os objetos sejam efetivamente idênticos (o método equals retorne true para as instâncias comparadas) e isso só irá ocorrer caso todos os atributos do objeto que corresponde a cada item na lista seja, efetivamente, idêntico.
Eu entendo a tua preocupação e, neste caso, sugiro que você pesquise sobre Comparator<T> e Comparable<T>
List<String> lista1 = new ArrayList<String>(); //Repare na tipagem <String> dada à List
List<String> lista2 = new ArrayList<String>();
lista1.add("a");
lista1.add("e");
lista1.add("i");
lista1.add("o");
lista1.add("u");
lista2.add("a");
lista2.add("o");
lista1.removeAll(lista2);
for(String s : lista1) {
System.out.println(s);
}
//Saída
//e
//i
//u
Entendeu como funciona o removeAll? retainAll seria o inverso, manteria só o que existe em ambas as listas.
Viu como não precisa comparar item a item?
Agora, isso só funciona porque o “a” e o “o” são iguais, tanto na lista1 quanto na lista2.