Skip to Main Content

Java Programming

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Adding key/value pairs from a HashMap in to an ArrayList

655717Feb 27 2012 — edited Feb 27 2012
I'm trying to create a HashMap, loop through that HashMap, and finally, I'm trying create an ArrayList of key/value pairs -- from the HashMap -- that contain within its value set a parameter value. I realize that might be a little hard to understand, so I've provided my code to make sense of what I'm trying to accomplish.
package data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class ProductInventory 
{  
    private Map <String, ArrayList<String>> product;
    private ArrayList <String> buildProduct;
    private ArrayList <ArrayList<String>> addProduct;

    public ProductInventory()
    {   
        /** Set default values **/

        product = new <String, ArrayList<String>> HashMap();
        buildProduct = new ArrayList<String> ();
        addProduct = new ArrayList<ArrayList <String>> ();
        
        /** START - Create ArrayList for each item and add to HashMap**/

        ArrayList <String> c1 = new ArrayList<String>();
        ArrayList <String> c2 = new ArrayList<String>();

        c1.add("computer"); c1.add("Apple"); c1.add("iPad2"); c1.add("499.00");
        c2.add("computer"); c2.add("Asus"); c2.add("Zenbook"); c2.add("1449.00");

        ArrayList <String> tv1 = new ArrayList<String>();
        ArrayList <String> tv2 = new ArrayList<String>();

        tv1.add("television"); tv1.add("Panasonic"); tv1.add("Viera"); tv1.add("899.00");
        tv2.add("television"); tv2.add("Samsung"); tv2.add("Series 6"); tv2.add("1597.00");

        ArrayList <String> a1  = new ArrayList<String>();
        ArrayList <String> a2 = new ArrayList<String>();

        a1.add("audio"); a1.add("Bose"); a1.add("321 GS Series III"); a1.add("999.00");
        a2.add("audio"); a2.add("Onkyo"); a2.add("HT-S3400"); a2.add("329.00"); 

        /** END - Create ArrayList for each item and add to HashMap **/

        /** Add entrys to HashMap **/

        product.put("CMC769LLA",c1);
        product.put("CUX31EDH72",c2);
        product.put("TVTCL50E3",tv1);
        product.put("TVUN55D6000",tv2);
        product.put("A321GSIIIBK",a1);
        product.put("AHTS3400",a2);

    }

    /** For the sake of this example, the productAttribute parameter will be equal to "computer"  **/
    
    public void setProducts(String productAttribute)
    {
            for (Map.Entry <String, ArrayList<String>> entry : product.entrySet()) /** Loop through all entrys in the HashMap **/
            {              
                for (String s: entry.getValue()) /** Loop through all values in HashMap**/
                {
                    /** Add product attributes **/
                    if (s.equals(productAttribute))  /** Check to see if param exists in the value set**/
                    {
                       /** Add key to buildProduct ArrayList **/
                        buildProduct.add(entry.getKey()); 

                         /*Loop through values of the corresponding key and add to buildProduct*/
                        for (Iterator<String> i = entry.getValue().iterator(); i.hasNext();)
                        {    
                                Object item = i.next(); 
                                buildProduct.add(item.toString());
                        }
                        
                        /** Add buildProduct arrayList to product arrayList **/
                        addProduct.add(buildProduct);
                        break; /** Exit nested loop**/
                    }
                }
            }  
    }
}
For the desired output we can assume that the productAttribute parameter value is "Computer".

Current output of the addProduct ArrayList:
Size of ArrayList: [2]
Content of each element:
[0] - (Size [10]
      [0] - "CMC769LLA"
      [1] - "Computer"
      [2] - "Apple"
      [3] - "iPad2"
      [4] - "499.00"
      [5] - "CUX31EDH72"
      [6] - "Computer"
      [7] - "Asus"
      [8] - "Zenbook"
      [9] - "1449.00"
[1] - (Size [10])
     /**  It includes the exact same content as element [0] **/
Desired output of the addProduct ArrayList:
Size of ArrayList: [2]
Content of each element:
[0] - (Size [5])
      [0] - "CMC769LLA"
      [1] - "Computer"
      [2] - "Apple"
      [3] - "iPad2"
      [4] - "499.00"
[1] - (Size [5])
      [0] - "CUX31EDH72"
      [1] - "Computer"
      [2] - "Asus"
      [3] - "Zenbook"
      [4] - "1449.00"
I can't seem to figure out what I'm doing wrong. Any help would be greatly appreciated.
This post has been answered by unknown-7404 on Feb 27 2012
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Mar 26 2012
Added on Feb 27 2012
2 comments
1,438 views