Duplicar elemento de um ArrayList

12 respostas
C

Olá, estou com precisando repetir o elemento de um ArrayLista quantas vezes que o código for repetido no parâmetro. Recebo os parâmetros em uma String dessa forma: “978,100,400,400,300,994,994,994”. Podemos observar que o código 994 se repete 3 vezes, o 400 repete 2 e os demais 1.

O Problema:
Preciso fazer a contagem dos parâmetros e fazer os elementos do ArrayLista duplicar, triplicar, quadruplicar de acordo com a quantidade e depois eu envio essa lista para um JRBeanCollectionDataSource, que será enviado ao Ireport e gerado etiquetas
com os endereços de algumas empresas.

Preciso só de fazer esse tratamento, abaixo parte do código.

public void gerarEtiqueta(Declaracao declaracao) {

CustomerDao dao = new CustomerDao();
   ArrayList<Empresa> listaEmpresa = new ArrayList<Empresa>();
   listaEmpresa = dao.capituraEnderecoEmpresa(declaracao); // Array List com endereço
   
   
   Map<String, String> parametros = new HashMap<String, String>();
   parametros.put("listaContrato", declaracao.getListaContrato()); // Parametros getListaContrato()
   
   
      /*TRATAMENTO DOS PARAMENTROS*/
   /*  
     String s = declaracao.getListaContrato();  
     String[] t = s.split (Pattern.quote (","));  
          
   int a = 0;
   
   NumberFormat format = new DecimalFormat("0000");  
   
   for(int i=0; i < t.length; i++){
	   
	   a = Integer.parseInt(t[i].replaceAll("'", "")); 
       String formatado = format.format(a);  
       System.out.println(formatado);
        
   }*/
   
   
   
   
JRBeanCollectionDataSource jd = new JRBeanCollectionDataSource(listaEmpresa);
   
Conexao conexao = new Conexao();
String arquivo = "EtiquetasEmpresa";

	   
    try{
    	  new RelatorioPdt().gerar(arquivo, parametros, jd);
	 	 
	    
        }catch (Exception e) {
			
        	 e.printStackTrace();
	    
        }finally{
	 	  
        	conexao.fechaConexao();
	   
        }
        
}


public void gerar(String arquivo, Map<String, String> parametros, JRBeanCollectionDataSource jd) throws JRException {
	//executa o relatório
	JasperPrint impressao = null;

	
	try {
		impressao = JasperFillManager.fillReport("C:\\InfoMed\\unicentro\\outros\\"+arquivo+".jasper", parametros, jd);
		
		
		
	} catch (JRException e) {
		throw e; 
	}
	
	//exibe o resultado
	JasperViewer viewer = new JasperViewer(impressao, false);
	viewer.show();
}

12 Respostas

M

Opa (Clecio Pessoa)

Você deveria duplicar na lista antes de enviar para o relatório.

// Exemplo
Customer c = dao.load(1);
list.add(c);

// carrega o mesmo registro e add novamente (duplicou)
Customer c1 = dao.load(1);
list.add(c1);
mauricioadl

usa o split e percorre no for, assim:

for(String s : seuParametro.split("\\,")){
SeuArrayList.add(s);
}

[]´s

asousaj

Clecio,
sempre que for colocar codigo java favor usar a tag Code, fica mais fácil de todos lerem.
[ code ]//Seu código JAVA aqui[ /code ]
Atenção sem os espaços dentro dos colchetes, deixei só pra aparecer as tags aqui.

//Seu código JAVA aqui, aqui não deixei espaços

flw

C

mauricioadl:
usa o split e percorre no for, assim:

for(String s : seuParametro.split("\\,")){
SeuArrayList.add(s);
}

[]´s

Rapaz, desta forma eu consigo quebrar a String!
Agora como faço para os elemento do ArrayList se repetirem de acordo com a quantidade de parâmetros que foram inseridos?

Clécio

C

asousaj:
Clecio,
sempre que for colocar codigo java favor usar a tag Code, fica mais fácil de todos lerem.
[ code ]//Seu código JAVA aqui[ /code ]
Atenção sem os espaços dentro dos colchetes, deixei só pra aparecer as tags aqui.

//Seu código JAVA aqui, aqui não deixei espaços

flw

Valeu pela dica!
Farei dessa forma nos próximos posts;

mauricioadl

qndo vc quebrar a string vai retornar um array de paramentros, basta vc adicionar um a um que eles vao se repetir.

C

mauricioadl,

Eu já tenho um ArrayLista preenchido com as informações do BD, nesse ArrayList tenho os campos codigo, razao social, endereço. Eu recebo como parâmetro o campo código, e esse parâmetro o pode se repetir, porém como busco as informações através de uma query o registro não duplica, por isso preciso tratar antes de enviar para Ireport.

Clécio

diego.sas
Velho acho que vc pode adaptar encima deste exemplo.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Lista {
	//
	public static void main(String[] args) {
		Lista lista = new Lista();
		List listaRelatorio = new ArrayList();
		List <String>listaParametros = lista.retornaLista("978,100,400,400,300,994,994,994");
		String aux = listaParametros.get(0);
		// Faz a chamada ao método que retorna o objeto passando o parametro.
		// EX:Objeto seuObjeto = seuMetodo(aux);
		String obj = aux; // Imagina que este seria o retorno da chamada
		for(String x: listaParametros){			
			if(aux.equals(x)){
				listaRelatorio.add(obj);
			}else{
				// Faz novamente a chamada  seuObjeto = seuMetodo(x);
				obj = x; 
				listaRelatorio.add(obj);
				aux = x;
			}
		}
	}
	public List<String> retornaLista(String parametro){
		String [] array = parametro.split(",");
		Arrays.sort(array);
		return Arrays.asList(array);
	}
}
Abraços
C
diego.sas:
Velho acho que vc pode adaptar encima deste exemplo.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Lista {
	//
	public static void main(String[] args) {
		Lista lista = new Lista();
		List listaRelatorio = new ArrayList();
		List <String>listaParametros = lista.retornaLista("978,100,400,400,300,994,994,994");
		String aux = listaParametros.get(0);
		// Faz a chamada ao método que retorna o objeto passando o parametro.
		// EX:Objeto seuObjeto = seuMetodo(aux);
		String obj = aux; // Imagina que este seria o retorno da chamada
		for(String x: listaParametros){			
			if(aux.equals(x)){
				listaRelatorio.add(obj);
			}else{
				// Faz novamente a chamada  seuObjeto = seuMetodo(x);
				obj = x; 
				listaRelatorio.add(obj);
				aux = x;
			}
		}
	}
	public List<String> retornaLista(String parametro){
		String [] array = parametro.split(",");
		Arrays.sort(array);
		return Arrays.asList(array);
	}
}
Abraços

Olá Diego, agora estou com apenas um problema para adaptar o código abaixo, pode ser até uma besteira de nada,
mais eu sou iniciante em java! veja se consegue me ajudar.

// EX:Objeto seuObjeto = seuMetodo(aux);  
  String obj = aux; // Imagina que este seria o retorno da chamada

Pois o meu método responsável pela busca das informações no BD retorna um ArrayList do tipo Empresa(Bean)

CustomerDao dao = new CustomerDao();
       ArrayList<Empresa> listaEmpresa = new ArrayList<Empresa>();
       ArrayList<Empresa> listaEmpresaAlterada = new ArrayList<Empresa>();
       
       Map<String, String> parametros = new HashMap<String, String>();
       parametros.put("listaContrato", declaracao.getListaContrato()); // Parametros getListaContrato()
       
             
       List <String>listaParametros = retornaLista(declaracao.getListaContrato());  
       String aux = listaParametros.get(0);  
      
       Empresa emp = dao.capituraEnderecoEmpresa(aux);
       
       for(String x: listaParametros){           
           if(aux.equals(x)){  
        	   listaEmpresaAlterada.add(emp);
           }else{  
        	   listaEmpresaNew = dao.capituraEnderecoEmpresa(aux);
        	   //listaEmpresa = x;   
        	   listaEmpresaNew.add(emp);
               aux = x;  
	           }  
	       }
diego.sas
Empresa emp = dao.capituraEnderecoEmpresa(aux);   
         
      for(String x: listaParametros){             
          if(aux.equals(x)){     
           listaEmpresaAlterada.add(emp);   
          }else{     
           emp = dao.capituraEnderecoEmpresa(x);   
           listaEmpresaAlterada.add(emp);   
              aux = x;     
           }     
       }

Assim, abraços

C
diego.sas:
Empresa emp = dao.capituraEnderecoEmpresa(aux);   
         
      for(String x: listaParametros){             
          if(aux.equals(x)){     
           listaEmpresaAlterada.add(emp);   
          }else{     
           emp = dao.capituraEnderecoEmpresa(x);   
           listaEmpresaAlterada.add(emp);   
              aux = x;     
           }     
       }

Assim, abraços

Já está dando erro na linha abaixo:

Empresa emp = dao.capituraEnderecoEmpresa(aux);

o método dao.capituraEnderecoEmpresa(aux); retorna um ArrayList do tipo Empresa

diego.sas
[quote=Clecio Pessoa]
diego.sas:
List <Empresa> listaAux = dao.capituraEnderecoEmpresa(aux);
listaEmpresaAlterada.addAll(listaAux );

         
      for(String x: listaParametros){             
          if(aux.equals(x)){     
           listaEmpresaAlterada.addAll(listaAux);   
          }else{ 
            List <Empresa> listaAux = dao.capituraEnderecoEmpresa(x);
           listaEmpresaAlterada.addAll(listaAux);   
              aux = x;     
           }     
       }

Assim, abraços

Estou supondo, pois teria que debugar certinho para ver o resultado etc....

Criado 21 de novembro de 2011
Ultima resposta 22 de nov. de 2011
Respostas 12
Participantes 5