Tenho dois laços de repetição que tem como função substituir textos por outros valores.
O problema começa quando eu mando adicionar um objeto em um ArrayList, no caso o objeto clone. A adição está no segundo laço por que o sistema gera resultado diferente para cada ingrediente.
Até a linha clone.getF().setCalculo(tempA); tudo ocorre normal, mas quando passa para a linha novosItems.add(contaItem, clone); tudo começa a dar errado.
O objeto clone que está sendo adicionado substitui todos os objetos contidos no ArrayList. Estranhamente apenas com um valor que ocorre esse erro. Para exemplificar o que ocorre veja esse exemplo:
//Um arrayList comum
ArrayList lista = new ArrayList<>();
//valores do arrayList lista
[0] = “Maria”, “12”
[1] = “João”, “10”
[2] = “Carlos”, “33”
Agora imagine que toda vez que se adiciona algo novo no ArrayList
todos os valores que seriam o nome por exemplo passam a ter o mesmo
valor do último inserido, mas as idades não sofrem alteração.
lista.add(“Roberto”)
[0] = “Roberto”, “12”
[1] = “Roberto”, “10”
[2] = “Roberto”, “33”
[3] = “Roberto”, “22”
Abaixo está o código que tá com esse problema.
for (Item item : this.tabela.getItem()) {
// Ingredientes
final String[] formulainicial = item.getF().getCalculo().clone();
Item clone = item;
for (Ingrediente ingrediente : this.tabela.getIngredite()) {
String tempA[];
tempA = formulainicial.clone();
//Subistitue o nome do ingrediente pelo seu valor
for (int i = 0; i < formulainicial.length; i++) {
// Procura por nutrientes que contem o mesmo nome e subistitue por valor do nutriente.,
for (Nutriente n : nuts) {
if (formulainicial[i].equalsIgnoreCase(n.getNome())) {
tempA[i] = String.valueOf(n.getQuantidade());
}
}
if ("MO".equalsIgnoreCase(formulainicial[i])) {
//Subistitue o texto "MO" pelo valor correspondente.
tempA[i] = String.valueOf(ingrediente.getQuantidadedeMO())+"";
}
if ("total".equalsIgnoreCase(formulainicial[i])) {
tempA[i] = String.valueOf(totaldeMO);
}
}
listaF.add(contaItem, tempA);
clone.getF().setCalculo(tempA);
novosItems.add(contaItem, clone);
contaItem++;
}
}