Adding values to the Hashmap <Integer, List<Integer>> and fetching them through the key?

Asked

Viewed 248 times

0

I’m making an app focused on external vendors. 1 external seller has several customers, and also several products, which is traded freely with these customers. These products do not always remain at the same value (discounts, taxes, etc), so the application has a calculation function.

Briefly: 1 customer has N products, and N products have N calculations.

However, I stuck to a part of my project that I need to display all the calculations of a respective product of a respective customer. Well, my code so far is this:

private List<Integer> ids;
private List<Integer> allValues;
private List<Calculos> calculosItems;
private List<Calculos> produtosSemRedundancia; //usado para exibir na ListView


private List<Calculos> RemoverDuplicados()
{
    //inicializa as variáveis
    allValues.clear();
    idQuantidadeProdutos.clear();
    idQuantidadeCalculos.clear();


    //separa os cálculos repetidos e envia para a lista auxiliar;
    for(Calculos i : calculosItems)
    {
        int valor = Integer.parseInt(i.getId_produto());
        if (valor == 1)
        {
            Log.d(TAG, "encontrei o ID 1! ADDing calc: " + i.get_id());
            testeList.put(valor, new ArrayList<Integer>(i.get_id()));
        }

        //Exibindo todos os produtos & os respectivos cálculos que estão dentro do ID produtos.
        Log.d(TAG, "X Produto ID: " + i.getId_produto() + "- Calculo ID: " + i.get_id());

        allValues.add(Integer.valueOf(i.getId_produto()));

        //se variável 'ids' não tiver o valor do ID do produto, eu adiciono aqui
        if(!ids.contains(Integer.valueOf(i.getId_produto())))
        {
            testeList.put(Integer.valueOf(i.getId_produto()), new ArrayList<Integer>(i.get_id()));
            produtosSemRedundancia.add(i);
            ids.add(Integer.valueOf(i.getId_produto()));
        }


    }

    try
    {
        //identifica quantos cálculos cada produto tem & adiciona no Map "idQuantidadeProdutos".
        for (Integer id : ids)
        {
            idQuantidadeProdutos.put(id, Collections.frequency(allValues, id));
        }

    }catch(IndexOutOfBoundsException e){}

    //aqui eu exibo todos meus produtos e quanto cálculos cada produto tem. O ideal seria exibir qual é o ID de cada
    //um destes cálculos.
    final String format = "Produto ID: %d possui: %d calculos";
    final Set<Integer> chaves = idQuantidadeProdutos.keySet(); // as chaves são os ids
    for (final Integer chave : chaves)
        Log.d(TAG, String.format(format, chave, idQuantidadeProdutos.get(chave)));


    return produtosSemRedundancia;
}

These are the values:

Produto ID: 1- Calculo ID: 14
Produto ID: 1- Calculo ID: 15
Produto ID: 1- Calculo ID: 16
Produto ID: 2- Calculo ID: 17
Produto ID: 8- Calculo ID: 18
Produto ID: 8- Calculo ID: 19
Produto ID: 8- Calculo ID: 20
Produto ID: 2- Calculo ID: 21
Produto ID: 6- Calculo ID: 23
Produto ID: 6- Calculo ID: 24
Produto ID: 6- Calculo ID: 25
Produto ID: 4- Calculo ID: 26
Produto ID: 1- Calculo ID: 27

And this is the output that says which is the product ID & how many calculations it has, as follows:

Produto ID: 4 possui: 1 calculos
Produto ID: 8 possui: 3 calculos
Produto ID: 1 possui: 4 calculos
Produto ID: 6 possui: 3 calculos
Produto ID: 2 possui: 2 calculos

The problem is that each of these calculations has an ID, and I don’t know how to store them within my logic and search them later (passing the customer ID and product ID, hence it returns me all the Ids of the calculations).

For example, if the customer clicked on the ID 1 product, he would have to return it to me:

Produto ID: 1 possui: 4 calculos com os IDs: [14, 15, 16, 27]

Can someone help me or suggest something, please? I’m lost in it for days. Thank you.

1 answer

2


Follow the logic: Below is the method to fill in with product id and the calculation.

Map<integer, List<Integer>> mapProdutoCalculo= new HashMap<integer, List<Integer>>();

public void adicionarCalculo(Integer idProduto, Integer calculo){
  if(map.containsKey(idProduto)){
     map.get(idProduto).add(calculo);
  }else{
     List<Integer>> lista = new ArrayList();
     lista.add(calculo);
     map.put(idProduto,lista);
  }
}

Usage : When user touches product id 1, you just do

List<Integer>> calculos = map.get(idProduto);

the variable calculi has all the calculations of that product.

  • Thanks friend, I will test right now (sorry for the delay, I was resting this fds and I didn’t even touch the pc, hehe).

  • worked perfectly, thank you very much man, you saved me!!

  • again man, thank you so much!!!!!!!

  • 2

    You’re welcome! [Staycoding]

Browser other questions tagged

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