Aew galera estou com uma duvida ao percorrer for encadeados mas que virao de forma dinamica estou tentando aplicar recursividade mas nada...tenho um objeto ProdutoAtributo p que possui uma lista de ProdutoAtributoValor pv ou seja
p = "TAMANHO"
pv1 = "P"
pv2 = "M"
pv3 = "G"
p2 = "COR"
pv1 = "VERDE"
pv2 = "VERMELHO"
combinando esses valores eu teria o Objeto SubProduto que vai recebendo objetos pv e concatenando as descricoes esse subproduto serve como um decorator apenas para visualizacao no sistema
TAMANHO P, COR VERDE
TAMANHO P, COR VERMELHO...
private List<ProdutoAtributo> lista;
private List<SubProdutoDecorator> listaSub;
private ProdutoAtributoController c = new ProdutoAtributoController();
private List<ProdAtributoValor> listaAux = new ArrayList<ProdAtributoValor>();
private SubProdutoDecorator subProduto = new SubProdutoDecorator();
private List<SubProdutoDecorator> listaSubProduto = new ArrayList<SubProdutoDecorator>();
private Produto p = new Produto();
private void teste() {
lista = c.getAll();
p.setDescricao("PRODUTO TESTE");
for (ProdAtributoValor v1 : lista.get(0).getProdAtributoValorList()) {
listaAux = new ArrayList<ProdAtributoValor>();
listaAux.add(v1);
for (ProdAtributoValor v2 : lista.get(1).getProdAtributoValorList()) {
armazenaProdutoAtributo(v2, 1, 3);
for (ProdAtributoValor v3 : lista.get(2).getProdAtributoValorList()) {
armazenaProdutoAtributo(v3, 2, 2);
for (ProdAtributoValor v4 : lista.get(3).getProdAtributoValorList()) {
armazenaProdutoAtributo(v4, 3, 1);
for (ProdAtributoValor v5 : lista.get(4).getProdAtributoValorList()) {
populaSubProduto(v5);
}
}
}
}
}
for (SubProdutoDecorator s : listaSubProduto) {
System.out.println(s.getDescricao());
}
System.out.println(contador);
}
private void populaSubProduto(ProdAtributoValor vFim) {
subProduto = new SubProdutoDecorator();
subProduto.setProduto(p);
for (ProdAtributoValor v : listaAux) {
subProduto.add(v);
}
subProduto.add(vFim);
listaSubProduto.add(subProduto);
contador++;
}
private void armazenaProdutoAtributo(ProdAtributoValor v, int indexRemove, int vezesRemove) {
for (int i = 0; i < vezesRemove; i++) {
try {
listaAux.remove(indexRemove);
} catch (Exception e) {
}
}
listaAux.add(v);
}
PRODUTO TESTE, TAMANHO - P, COR - VERDE, TIPO - REGATA, ESTAMPA - FLORESTA, GOLA - V
PRODUTO TESTE, TAMANHO - P, COR - VERDE, TIPO - REGATA, ESTAMPA - FLORESTA, GOLA - NORMAL
PRODUTO TESTE, TAMANHO - P, COR - VERDE, TIPO - REGATA, ESTAMPA - LOBO, GOLA - V
PRODUTO TESTE, TAMANHO - P, COR - VERDE, TIPO - REGATA, ESTAMPA - LOBO, GOLA - NORMAL
PRODUTO TESTE, TAMANHO - P, COR - VERDE, TIPO - POLO, ESTAMPA - FLORESTA, GOLA - V...
assim funciona perfeito mas e se o usuario informar apenas 2 Atributos ou mais de 5 atributos ae o sistema nao comporta pois esta estatico, alguem pode me dar uma força para tornar esse codigo dinamico
Obrigado.
