Duplicar elemento de um ArrayList

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();
}

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);

usa o split e percorre no for, assim:

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

[]´s

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

[quote=mauricioadl]usa o split e percorre no for, assim:

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

[]´s[/quote]

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

[quote=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
[/quote]

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

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

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

Velho acho que vc pode adaptar encima deste exemplo.

[code]
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 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 retornaLista(String parametro){
String [] array = parametro.split(",");
Arrays.sort(array);
return Arrays.asList(array);
}
}[/code]
Abraços

[quote=diego.sas]Velho acho que vc pode adaptar encima deste exemplo.

[code]
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 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 retornaLista(String parametro){
String [] array = parametro.split(",");
Arrays.sort(array);
return Arrays.asList(array);
}
}[/code]
Abraços[/quote]

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;  
	           }  
	       }  

[quote][code]
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;     
       }     
   }    

[/code][/quote]

Assim, abraços

[quote=diego.sas][quote][code]
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;     
       }     
   }    

[/code][/quote]

Assim, abraços[/quote]

Já está dando erro na linha abaixo:

Empresa emp = dao.capituraEnderecoEmpresa(aux);

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

[quote=Clecio Pessoa][quote=diego.sas][quote][code]

List 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;     
       }     
   }    

[/code][/quote]

Assim, abraços[/quote]

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