Hashmap overrides values

Asked

Viewed 153 times

0

I am trying to generate a hashmap (String, List Exercises) from a json:

[
   {
      "grupo":"Joelho",
      "nome":"joelho_1",
      "habilitar":"1"
   },
   {
      "grupo":"Joelho",
      "nome":"joelho_2",
      "habilitar":"1"
   },
   {
      "grupo":"Ombro",
      "nome":"ombro_1",
      "habilitar":"1"
   },
   {
      "grupo":"Tornozelo_Pe",
      "nome":"tornozelo_pe_1",
      "habilitar":"1"
   },
   {
      "grupo":"Tornozelo_Pe",
      "nome":"tornozelo_pe_2",
      "habilitar":"0"
   }
]

with the following code:

        if (utiliza_exercicio.equals("1")) {          //verifica se o grupo e exercicio estão habilitados para o paciente
            if (grupos.isEmpty()) {                   //verifica se o a lista de grupos está vazio para adicionar sem checar repetições
                Exercicios e = new Exercicios();
                e.setExercicio(exercicio);           //seta a String grupo para um objeto da classe Exercicios
                grupos.add(grupo);                      // adiciona o objeto da classe Exericios para uma lista de objetos de Exercicios
                exercicios.add(e);

            } else {
                if (grupos.contains(grupo)){              //verifica se o grupo já está contido na lista
                    Exercicios e = new Exercicios();
                    e.setExercicio(exercicio);
                    exercicios.add(e);                   //adiciona o exercicio à lista de objetos de exercícios
                    if (i == jsonArray.length()-1){                       //ultimo exercicio
                        hash.put(grupos.get(posicaoGrupo),exercicios);    //adiciona no hash
                    }
                }
                else{                                                      // caso o grupo de exercicio nao existir, adiciona na lista de grupos.

                    hash.put(grupos.get(posicaoGrupo),exercicios);        // inclui o grupo e seus exercicios no hashmap
                    posicaoGrupo = posicaoGrupo + 1;                      //marca a posicao na lista de grupos do novo grupo acrescentado
                    exercicios.clear();                                   //limpa a lista para armazenar os exercicios do novo grupo
                    Exercicios e = new Exercicios();
                    e.setExercicio(exercicio);
                    exercicios.add(e);                                     //inicia o armazenamento dos exercicios do novo grupo
                    grupos.add(grupo);                                         //adiciona o novo grupo à lista de grupos

                }
            }

        }
        else if (i == jsonArray.length()-1){                           //ultimo do jsonObject que não será utilizado.
            hash.put(grupos.get(posicaoGrupo),exercicios); //adiciona o ultimos exercicios capturados junto com seu grupo específico, caso haja
        }
    }

But exercises that are included in Hashmap are always overwritten, causing fields tornozelo_pe_1 and tornozelo_pe_2 are always listed for all groups. But the groups themselves are being captured correctly.

Since I don’t have a set number of exercises every time, I couldn’t create a function and add list by list for each exercise group. What can I do?

  • Oopss.. Only the ankle_pe_1 is listed since the ankle_pe_2 is disabled.

1 answer

1

I managed to find the problem!

I would have to create a new object for the Exercise List for it to receive a new list of exercises.

                hash.put(grupos.get(posicaoGrupo),exercicios);        // inclui o grupo e seus exercicios no hashmap
                posicaoGrupo = posicaoGrupo + 1;                      //marca a posicao na lista de grupos do novo grupo acrescentado
                //exercicios.clear();                                   //limpa a lista para armazenar os exercicios do novo grupo
                Exercicios e = new Exercicios();
                e.setExercicio(exercicio);
                exercicios = new ArrayList<>();   // AQUI
                exercicios.add(e);                                     //inicia o armazenamento dos exercicios do novo grupo
                grupos.add(grupo);                                         //adiciona o novo grupo à lista de grupos

Browser other questions tagged

You are not signed in. Login or sign up in order to post.