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