In this article, we will discuss how to store/put multiple values for single key in HashMap
Sometimes, we might require to store multiple values for its corresponding key in Map like storing all/few top countries belonging to particular continent
- Asian continent – India, China, Japan, Mongolia
- African continent – Libya, Mauritius, Gambia, Kenya
- European continent – Russia, France, Moldova, Italy
1. HashMap – Single key with Multiple values :
- In this illustration, we are storing couple of top countries of Asian, African and European continents
- Create HashMap object with Key being String type and Value as List of Strings- In the 1st list, we are storing countries belonging to Asian continent and putting into HashMap as Value with Key as “Asian“
- For 2nd list, we are storing countries belonging to African continent and putting into HashMap as Value with Key as “African“
- For 3rd list, we are storing countries belonging to Euorpean continent and putting into HashMap as Value with Key as “European“
 
- Finally, iterate and print to console using Java 8 forEach() method of Map class
HashMapWithSingleKeyAndMultipleValues.java
package in.bench.resources.iterating.hashmap.of.arraylist;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HashMapWithSingleKeyAndMultipleValues {
	public static void main(String[] args) {
		// 1. create HashMap
		Map<String, List<String>> topContriesOfContinent =
				new HashMap<String, List<String>>();
		// 1.1 create List 1
		List<String> asianContinentCountries =
				new ArrayList<String>();
		// 1.1.1 add top countries of Asian continent
		asianContinentCountries.add("India");
		asianContinentCountries.add("China");
		asianContinentCountries.add("Japan");
		asianContinentCountries.add("Mongolia");
		// 1.2 create List 2
		List<String> africanContinentCountries =
				new ArrayList<String>();
		// 1.2.1 add top countries of African continent
		africanContinentCountries.add("Libya");
		africanContinentCountries.add("Mauritius");
		africanContinentCountries.add("Gambia");
		africanContinentCountries.add("Kenya");
		// 1.3 create List 3
		List<String> europeanContinentCountries =
				new ArrayList<String>();
		// 1.3.1 add top countries of African continent
		europeanContinentCountries.add("Russia");
		europeanContinentCountries.add("France");
		europeanContinentCountries.add("Moldova");
		europeanContinentCountries.add("Italy");
		// 1.4 put list to Map
		topContriesOfContinent.put("Asian", asianContinentCountries);
		topContriesOfContinent.put("African", africanContinentCountries);
		topContriesOfContinent.put("European", europeanContinentCountries);
		// 1.5 iterate and print to console
		System.out.println("HashMap with Single Key and Multiple Values : \n");
		topContriesOfContinent.forEach(
				(key,value) -> System.out.println("Key (Continent) : " + key 
						+ "\n\t Values (Countries) : " + value)
				);
	}
}
Output:
HashMap with Single Key and Multiple Values : 
Key (Continent) : European
	 Values (Countries) : [Russia, France, Moldova, Italy]
Key (Continent) : Asian
	 Values (Countries) : [India, China, Japan, Mongolia]
Key (Continent) : African
	 Values (Countries) : [Libya, Mauritius, Gambia, Kenya]
2. HashMap – Filter from Multiple values for a Key :
- This is the same example we seen in the previous section, but here we are going to filter values on the basis of some condition
- For each of the continents, we are going to filter those countries which are starting with capital letter “M“
- Finally, iterate and print to console using Java 8 forEach() method of Map class
FilterFromMultipleValuesForKey.java
package in.bench.resources.iterating.hashmap.of.arraylist;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class FilterFromMultipleValuesForKey {
	public static void main(String[] args) {
		// 1. create HashMap
		Map<String, List<String>> topContriesOfContinent =
				new HashMap<String, List<String>>();
		// 1.1 create List 1
		List<String> asianContinentCountries =
				new ArrayList<String>();
		// 1.1.1 add top countries of Asian continent
		asianContinentCountries.add("India");
		asianContinentCountries.add("China");
		asianContinentCountries.add("Japan");
		asianContinentCountries.add("Mongolia");
		// 1.2 create List 2
		List<String> africanContinentCountries =
				new ArrayList<String>();
		// 1.2.1 add top countries of African continent
		africanContinentCountries.add("Libya");
		africanContinentCountries.add("Mauritius");
		africanContinentCountries.add("Gambia");
		africanContinentCountries.add("Kenya");
		// 1.3 create List 3
		List<String> europeanContinentCountries =
				new ArrayList<String>();
		// 1.3.1 add top countries of African continent
		europeanContinentCountries.add("Russia");
		europeanContinentCountries.add("France");
		europeanContinentCountries.add("Moldova");
		europeanContinentCountries.add("Italy");
		// 1.4 put list to Map
		topContriesOfContinent.put("Asian", asianContinentCountries);
		topContriesOfContinent.put("African", africanContinentCountries);
		topContriesOfContinent.put("European", europeanContinentCountries);
		// 1.5 filter those all values staring with "M" for each Key 
		Map<String, List<String>> filteredCountries = topContriesOfContinent
				.entrySet()
				.stream()
				.collect(Collectors.toMap(Map.Entry::getKey, 
						value -> value.getValue().stream().filter(val -> val.startsWith("M"))
						.collect(Collectors.toList())));
		// 1.6 iterate and print to console
		System.out.println("HashMap - Filter from Multiple Values for a Key : \n");
		filteredCountries
		.entrySet()
		.forEach(entry -> System.out.println("Key (Continent) : " + entry.getKey() 
		+ "\n\t Values (Countries) : " + entry.getValue()));
	}
}
Output:
HashMap - Filter from Multiple Values for a Key : 
Key (Continent) : European
	 Values (Countries) : [Moldova]
Key (Continent) : Asian
	 Values (Countries) : [Mongolia]
Key (Continent) : African
	 Values (Countries) : [Mauritius]
Related Articles:
- Java 8 – Filter null and empty values from a Stream
- Java 8 – Filter a Map by its Key and Value
- Java 8 – How to store multiple values for single key in HashMap and Filter them ?
- Java 8 – Merging two or more Stream of elements
- Java 8 – How to Merge or Concatenate 2 Arrays using Stream API ?
- Java 8 – How to merge/concatenate/join two lists into single list ?
- Java – Merging 2 Arrays using List/Set approach
- Java – Concatenating 2 Arrays using Third Arrays approach
References :
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#forEach-java.util.function.Consumer-
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#filter-java.util.function.Predicate-
- https://docs.oracle.com/javase/8/docs/api/java/util/List.html
- https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
- https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
Happy Coding !!
Happy Learning !!