Declaração dinâmica de ArrayList. (RESOLVIDO)

Olá, galera. Dei uma procurada e não achei resposta para minha dúvida nem aqui, nem no google.
Confesso que não procurei tanto, mas tenho um bom motivo: Estou no trabalho e preciso dessa respota o quanto antes.
Sou novo em JAVA e aceito que essa dúvida pode ser um tanto quanto insignificante, mas não sei mesmo o que fazer.

Preciso criar variáveis dinâmicas, pois estou criando um programa que gera todas as combinações possíveis de um produto. Todas as combinações de largura, comprimento e qualquer outro atributo que o produto possa ter dada apenas o ID da subfamilia onde esse produto está.

Bom… Atributos e valores identificados, preciso criar um ArrayList para cada um desses com todos os valores.

A ideia é: A partir do momento que pego o nome do atributo, faço uns tratamenos nele e, o nome tratado eu quero que seja o nome do ArrayList a ser criado.

Exemplo:

public class Blablabla{
ArrayList atributos = new ArrayList(); //Atributo da classe. É nele que vou botar os ArrayLists com os nomes que serão gerados e seus respectivos valores.
.
.
.
if ((getCURRENT_ATTRIBUTE() == 0) || (getCURRENT_ATTRIBUTE() != rs.getInt(“m_attribute_id”))){
n_att++;
setCURRENT_ATTRIBUTE(rs.getInt(“m_attribute_id”));
String ablufs[] = rs2.getString(“name”).split(": “);
ablufs[1] = ablufs[1].toLowerCase();
ablufs[1] = ablufs[1].replace(” ", “_”);
ablufs[1] = RemoverAcentos.remover(ablufs[1]);
// Aqui é que esta a dúvida. Eu quero que o valor gerado na variável ablufs[1] seja o nome do ArrayList abaixo.
ArrayList valorDaAblufs[1] = new ArrayList();
.
.
.
}
}
.
.
.

Desde já agradeco a atenção.

po cara… explica um pouco melhor o que vc quer fazer ae porque ta meio confuso.

pois é. acho que falei demais e, por isso, acabei confundindo.
O que eu quero é gerar dinâmicamente o nome da variável e não defini-la na hora.

Vou dar um exemplo muito simples:

String abc = “largura”;

Agora eu quero que o valor da variável abc (largura).

Seja o nome do ArrayList que eu vou criar:

ArrayListvalorDaVariavel[color=red]abc[/color] = new ArrayList();

Não sei se fui claro. Se não fui, peço que me avise de novo para eu tentar explicar melhor.

Vc quer um MAP:

[code]import java.util.*;
public class Test{
public static void main(String [] xxx){
String abc = “palavra”;
Map<String,Integer> hs = new HashMap<String,Integer>();

    hs.put(abc,abc.length());
    System.out.println("palavra tem " + hs.get("palavra") + " caracteres");
}

}
[/code]

Você está precisando associar um nome a uma lista, certo?

Nesse caso, use um Map<String, List<String>>:

[code]//Criação do mapa
Map<String, List> atributos = new HashMap<String, List>();

//Inserção no mapa
atributos.put(“Largura”, valoresDeLargura);

//Leitura do mapa
List valoresDeLargura = atributos.get(“largura”);[/code]

E porque você precisa de uma variável com o nome criado assim? Não poderia simplesmente colocar algum nome sugestivo como “lista” e resolvido? Onde você pretende usar esse código?

Bom… Acho que não expliquei direito ainda.
É mais simples do que eu estou conseguindo explicar.

Eu quero que um ArrayList tenha o nome de “largura”. (A variável do ArrayList vai ser “largura”).
Só que a questão é que o nome é um exemplo. O nome da variável na verdade não vai ser definida por mim. Vai ser definida pelo valor que eu pegar do banco de dados.
Se no banco de dados o valor for “comprimento” o nome da variável do ArrayList vai ser “comprimento” como se eu tivesse declarado “ArrayList comprimento = new ArrayList()”
Se no banco estiver “blablabla” o nome da variável ArrayList vai ser blablabla. Como se eu tivesse definido no código ArrayList blablabla = new ArrayList()".

Entenderam? A minha dúvida nada tem a ver com o que eu posso fazer com o ArrayList em si. Nada a ver com os elementos que ele vai carregar.

É o nome da própria variável que vai ser gerado automaticamente. Sem eu definir antes “O variável do desse ArrayList vai ser ‘a’”.

Preciso disso por motivos que talvez não fique claro pq o programa é muito complexo e demandaria muitas linhas pra explicar :slight_smile:

Mas o negócio é que todos os atributos e valores dos mesmos são cadastrados a mão por um usuário dependende de uma subfamília de produtos.
Ou seja, na subfamília a qual os produtos a serem gerados pelo programa vão pertencer, já é prédefinido se ele vai ter largura e/ou comprimento e/ou número de prateleiras, etc, etc, etc.

Eu preciso identificar no programa o que é o que, pois tenho que respeitar um padrão na hora de definir o nome do produto que ficará como no exemplo:
“nomeDoProduto-100 - 30 - 4”.

use um map como o vinygodoy ja mencionou acima, um map vc associa um valor a uma chave então a chave vc gera dinamicamente vinda do banco e ao valor vc adiciona um arraylist, ai para buscar vc busca pela chave no map que vai lhe retornar o arraylist daquela chave.

Ah sim!
Acho que entendi, mas não tenho certeza.
Mas caso eu esteja certo, o nome da chave (no exemplo do Vinícius) não está sendo gerada automáticamente e sim manualmente.
Ele definiu que o nome da chave é “largura”.
Voce quer dizer que ao invés de botar “largura” eu posso colocar “abc” sendo “abc = largura”?
No caso:

abc = nomePegoDoBancoDeDados; (“largura”, por exemplo)

Map<String, List> atributos = new HashMap<String, List>();

//Inserção no mapa

atributos.put(abc, valoresDeLargura);

.
.
.

Fazendo isso, eu estou definindo que a chave praquele conjunto de valores é largura? Mesmo tendo usado uma variável com o valor “largura” ao invés de definir “largura” diretamente?

Ah! É isso mesmo! Li de novo o post do peczenyj e entendi o que ele quis dizer. O retorno de caracteres foi só um exemplo e ele usou o valor da variável abc pra definir o nome da chave!
Valeu mesmo! Muito obrigado!

muito interessante! :slight_smile:

Vc não vai conseguir criar variaveis dinamicamente em Java – sem usar algum recurso como Scripting e, mesmo assim, pode haver alguma forma de contornar o seu problema sem recorrer a este artificio. Map é um exemplo.

[quote=Kura]Ah sim!
Acho que entendi, mas não tenho certeza.
Mas caso eu esteja certo, o nome da chave (no exemplo do Vinícius) não está sendo gerada automáticamente e sim manualmente.
Ele definiu que o nome da chave é “largura”.
Voce quer dizer que ao invés de botar “largura” eu posso colocar “abc” sendo “abc = largura”?
No caso:

abc = nomePegoDoBancoDeDados; (“largura”, por exemplo)

Map<String, List> atributos = new HashMap<String, List>();

//Inserção no mapa

atributos.put(abc, valoresDeLargura);

.
.
.

Fazendo isso, eu estou definindo que a chave praquele conjunto de valores é largura? Mesmo tendo usado uma variável com o valor “largura” ao invés de definir “largura” diretamente?[/quote]

Faz assim: testa. Abre o eclipse ou Netbeans e começa a escrever pequenos exemplo. Suas duvidas são muito simples mas vc não apresenta essa caracteristica de investigar o codigo através de pequenas alterações para ver o resultado e acho benefico vc trabalhar assim.

Você está certo. Muito obrigado pela dica!