Adding values to the HashMap Integer, ListInteger, and fetching them through the key?

0

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

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

However, I caught on a part of my project that I need to display all the calculations of a respective product from 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 what the product ID is & 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 do not know how to store them within my logic and search them afterwards (passing the customer ID and product ID, hence it returns all IDs of calculations).

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

Product ID: 1 has: 4 calculations with IDs: [14, 15, 16, 27]

Can anyone help me or suggest something, please? I've been lost for days. Thank you.

    
asked by anonymous 22.05.2015 / 22:09

1 answer

2

The logic follows: Below is the method to fill with product id and 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 you touch the id 1 product, you just need to

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

The calculus variable has all the calculations for that product.

    
23.05.2015 / 00:49