Retrieve all values from HashMap keys in an ArrayList Java

JavaArraylistHashmap

Java Problem Overview


Good day, this is kind of confusing me now(brain freeze!) and seem to be missing something. Have an ArrayList which i populate with a HashMap. now i put in my HashMap and arraylist.

 Map.put(DATE, value1);
 Map.put(VALUE, value2);

 arraylist.put(Map);

Since am parsing a JSON, the arraylist increases in significant size. now my question is how do you get the values from both map keys in the arraylist? i have tried this

  if(!list.isEmpty()){   // list is an ArrayList
    		
    		for(int k = 0; k < list.size(); k++){
    			map = (HashMap)list.get(k);
    		}
    		 
    	}
    	
    	Log.d(TAG, "map size is" + map.size());
    	
    	String [] keys = new String[map.size()];
    	String [] date_value = new String[map.size()];
    
    	String [] value_values = new String[map.size()];
    	
    	int i = 0;
    	Set entries = map.entrySet();
    	Iterator iterator = entries.iterator();
    	
    	while(iterator.hasNext()){
    		
    		Map.Entry mapping = (Map.Entry)iterator.next();
    		keys[i] = mapping.getKey().toString(); 
    		date_value[i] = map.get(keys[i]);
    		
    		if(keys[i].equals(DATE)){
    			date_value[i] = map.get(keys[i]);
    		
    		} else if(keys[i].equals(VALUE)){
    			value_values[i] = map.get(keys[i]);
    		}

                   i++;
                 }

But i can't seem to get all the values. the Map size always return a value of 2, which is just the elements. how can i get all the values from the Map keys in the ArrayList? Thanks

Java Solutions


Solution 1 - Java

Why do you want to re-invent the wheel, when you already have something to do your work. Map.keySet() method gives you a Set of all the keys in the Map.

Map<String, Integer> map = new HashMap<String, Integer>();

for (String key: map.keySet()) {
    System.out.println("key : " + key);
    System.out.println("value : " + map.get(key));
}

Also, your 1st for-loop looks odd to me: -

   for(int k = 0; k < list.size(); k++){
            map = (HashMap)list.get(k);
   }

You are iterating over your list, and assigning each element to the same reference - map, which will overwrite all the previous values.. All you will be having is the last map in your list.

EDIT: -

You can also use entrySet if you want both key and value for your map. That would be better bet for you: -

    Map<String, Integer> map = new HashMap<String, Integer>();
	
	for(Entry<String, Integer> entry: map.entrySet()) {
		System.out.println(entry.getKey());
		System.out.println(entry.getValue());
	}

P.S.: -
Your code looks jumbled to me. I would suggest, keep that code aside, and think about your design one more time. For now, as the code stands, it is very difficult to understand what its trying to do.

Solution 2 - Java

List constructor accepts any data structure that implements Collection interface to be used to build a list.

To get all the keys from a hash map to a list:

Map<String, Integer> map = new HashMap<String, Integer>();
List<String> keys = new ArrayList<>(map.keySet());

To get all the values from a hash map to a list:

Map<String, Integer> map = new HashMap<String, Integer>();
List<Integer> values = new ArrayList<>(map.values());

Solution 3 - Java

Try it this way...

I am considering the HashMap with key and value of type String, HashMap<String,String>

HashMap<String,String> hmap = new HashMap<String,String>();

hmap.put("key1","Val1");
hmap.put("key2","Val2");

ArrayList<String> arList = new ArrayList<String>();

for(Map.Entry<String,String> map : hmap.entrySet()){

     arList.add(map.getValue());

}

Solution 4 - Java

Put i++ somewhere at the end of your loop.

In the above code, the 0 position of the array is overwritten because i is not incremented in each loop.

FYI: the below is doing a redundant search:

if(keys[i].equals(DATE)){                 
   date_value[i] = map.get(keys[i]);              
} else if(keys[i].equals(VALUE)){              
   value_values[i] = map.get(keys[i]);             
} 

replace with

if(keys[i].equals(DATE)){                 
   date_value[i] = mapping.getValue();
} else if(keys[i].equals(VALUE)){              
   value_values[i] = mapping.getValue()
} 

Another issue is that you are using i for date_value and value_values. This is not valid unless you intend to have null values in your array.

Solution 5 - Java

This is incredibly old, but I stumbled across it trying to find an answer to a different question.

> my question is how do you get the values from both map keys in the arraylist?

for (String key : map.keyset()) {
  list.add(key + "|" + map.get(key));
}

> the Map size always return a value of 2, which is just the elements

I think you may be confused by the functionality of HashMap. HashMap only allows 1 to 1 relationships in the map.

For example if you have:

String TAG_FOO = "FOO";
String TAG_BAR = "BAR";

and attempt to do something like this:

ArrayList<String> bars = ArrayList<>("bar","Bar","bAr","baR");
HashMap<String,String> map = new HashMap<>();
for (String bar : bars) {
  map.put(TAG_BAR, bar);
}

This code will end up setting the key entry "BAR" to be associated with the final item in the list bars.

In your example you seem to be confused that there are only two items, yet you only have two keys recorded which leads me to believe that you've simply overwritten the each key's field multiple times.

Solution 6 - Java

Suppose I have Hashmap with key datatype as KeyDataType and value datatype as ValueDataType

HashMap<KeyDataType,ValueDataType> list;

Add all items you needed to it. Now you can retrive all hashmap keys to a list by.

KeyDataType[] mKeys;
mKeys=list.keySet().toArray(new KeyDataType[list.size()]);

So, now you got your all keys in an array mkeys[]

you can now retrieve any value by calling

 list.get(mkeys[position]);

Solution 7 - Java

Java 8 solution for produce string like "key1: value1,key2: value2"

private static String hashMapToString(HashMap<String, String> hashMap) {

    return hashMap.keySet().stream()
            .map((key) -> key + ": " + hashMap.get(key))
            .collect(Collectors.joining(","));

}

and produce a list simple collect as list

private static List<String> hashMapToList(HashMap<String, String> hashMap) {

    return hashMap.keySet().stream()
            .map((key) -> key + ": " + hashMap.get(key))
            .collect(Collectors.toList());

}

Solution 8 - Java

Create an ArrayList of String type to hold the values of the map. In its constructor call the method values() of the Map class.

Map <String, Object> map;
List<Object> list = new ArrayList<Object>(map.values());

Solution 9 - Java

It has method to find all values from map:

Map<K, V> map=getMapObjectFromXyz();
Collection<V> vs= map.values();
     

Iterate over vs to do some operation

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionirobotxxView Question on Stackoverflow
Solution 1 - JavaRohit JainView Answer on Stackoverflow
Solution 2 - JavaSivabalanView Answer on Stackoverflow
Solution 3 - JavaKumar Vivek MitraView Answer on Stackoverflow
Solution 4 - JavaJohn BView Answer on Stackoverflow
Solution 5 - JavanukeforumView Answer on Stackoverflow
Solution 6 - JavachandanView Answer on Stackoverflow
Solution 7 - JavaAli KatkarView Answer on Stackoverflow
Solution 8 - JavaPramod AryalView Answer on Stackoverflow
Solution 9 - JavaAnil PalView Answer on Stackoverflow