Get ArrayLists of Values and Keys from a HashMap in Java
In Java, the HashMap
is a commonly used data structure that stores keys-value
pairs. Sometimes, we may need to extract the keys and values from a HashMap and store them in more convenient data structures like ArrayList
. The objective of this article is to provide a guide on how to retrieve keys and values as ArrayLists from a HashMap in Java.
1. Obtaining Views from a Map
The Collections framework provides methods that allow us to obtain views from a Map. The methods listed below allow us to view the set of keys
, the Collection of values
, and the set of key-value
pairs in a Map. They are:
Set<k> keySet()
Collection<K> values()
Set<Map.Entry<K, V>> entrySet()
The remainder of this article will explore how these methods can be employed to obtain keys and values as ArrayLists from a HashMap in Java.
2. Using Java 8 Stream
We can use Java 8 streams to obtain values
and keys
as ArrayLists from a HashMap.
2.1 Convert the keys of a HashMap into an ArrayList using Java 8 Stream
The code listing below shows the steps to convert the keys of a HashMap into an ArrayList using Java Streams:
public class HashMapKeysToArrayList { public static void main(String[] args) { // Create a HashMap HashMap<Integer, String> fruits = new HashMap<Integer, String>(); // Populate the HashMap with key-value pairs fruits.put(1, "Apple"); fruits.put(2, "Banana"); fruits.put(3, "Cherry"); fruits.put(4, "Grape"); fruits.put(5, "Orange"); // Use Java Streams to convert HashMap keys to an ArrayList List<Integer> keyList = fruits.keySet() .stream() .collect(Collectors.toCollection(ArrayList::new)); // Now, keyList contains the keys as an ArrayList System.out.println("Keys as ArrayList: " + keyList); } }
In the code above, we start by creating a HashMap
of fruits and populating it with some key-value
pairs. Next, we use the keySet()
method to obtain the set of keys
. We then apply a stream to the set of keys using stream()
method of Java Stream API and collect the stream into an ArrayList
using the Collectors.toCollection(ArrayList::new)
method which collects the keys into an ArrayList.
The result is an ArrayList containing the keys from the HashMap as shown in Fig 1 below:
2.2 Convert the values of a HashMap into an ArrayList using Java 8 Stream
The code snippet below shows how we can convert the values
of a HashMap into an ArrayList using Java 8 Streams.
// Use Java 8 Streams to convert HashMap values to an ArrayList List<String> valueList = fruits.values() .stream() .collect(Collectors.toList()); // Now, valueList contains the values as an ArrayList System.out.println("Values as ArrayList: " + valueList);
In the code above, we update the program and use the values()
method to obtain a collection of values from the HashMap and apply a stream to the collection of values using .stream()
method, making use of the Java 8 Stream API. We then collect the stream into an ArrayList using the .collect(Collectors.toList())
method.
The result is an ArrayList containing the values from the HashMap.
Values as ArrayList: [Apple, Banana, Cherry, Grape, Orange]
3. Use forEach Method and Lambda Expressions
We can use the forEach
method and lambda expressions to get the values and keys from a HashMap
and store them in ArrayList
s. Below is an example of how we can achieve this:
public class HashMapToList { public static void main(String[] args) { // Create a sample HashMap HashMap<Integer, String> fruits = new HashMap<>(); fruits.put(1, "Apple"); fruits.put(2, "Banana"); fruits.put(3, "Cherry"); fruits.put(4, "Grape"); fruits.put(5, "Orange"); // Create ArrayLists to store keys and values ArrayList<Integer> keysList = new ArrayList<Integer>(); ArrayList<String> valuesList = new ArrayList<String>(); // Use forEach and lambda expressions to populate the ArrayLists fruits.forEach((key, value) -> { keysList.add(key); valuesList.add(value); }); // Print the keys and values System.out.println("Keys: " + keysList); System.out.println("Values: " + valuesList); } }
In this example, we create a HashMap
of fruits with Integer keys
and String values
. Then, we create two ArrayLists, keyList
and valueList
, which we want to use to store the keys
and values
obtained from the HashMap.
We then use the forEach
method with a lambda expression to iterate through the HashMap
, extract keys and values, and add them to their respective ArrayList
s.
Finally, we print the contents of the ArrayList
s and the output we get from running the application code is:
Keys: [1, 2, 3, 4, 5] Values: [Apple, Banana, Cherry, Grape, Orange]
4. Use the Constructor of an ArrayList
To get both the keys and values from a HashMap
and store them in separate ArrayList
objects using the ArrayList
constructor, we can use the following code:
public class ArrayListConstructor { public static void main(String[] args) { // Create a sample HashMap HashMap<Integer, String> fruits = new HashMap<>(); fruits.put(1, "Apple"); fruits.put(2, "Banana"); fruits.put(3, "Cherry"); fruits.put(4, "Grape"); fruits.put(5, "Orange"); // Get the keys from the HashMap Set<Integer> keys = fruits.keySet(); // Get the Collection of values from the HashMap Collection<String> values = fruits.values(); // Create an ArrayList of keys ArrayList<Integer> keysList = new ArrayList<Integer>(keys); // Create an ArrayList of values ArrayList<String> valuesList = new ArrayList<>(values); // Print the keys and values System.out.println("Keys as ArrayList: " + keysList); System.out.println("Values as ArrayList: " + valuesList); } }
In this code, we first create a HashMap
named fruits and populate it. Next, we use the keySet()
method of the HashMap to return the Set
containing all the keys
of the HashMap. Next, we use the values()
method of the HashMap to obtain a Collection
of all the values
present in the HashMap.
Then, we use the ArrayList
constructor to create ArrayList
objects for keys and values separately. The first ArrayList created is named keysList
is used to initialize an ArrayList
for the keys while the second ArrayList named valuesList
is used to initialize an ArrayList
for values.
The result will be two separate ArrayList
s, one containing the keys and the other containing the values from the HashMap
.
5. Conclusion
In this article, we have listed techniques for displaying various views of a HashMap, and we’ve delved into several approaches, complete with code snippets, for extracting the key and value lists from a HashMap and transforming them into ArrayLists in the Java programming language.
Converting the keys and values of a HashMap
into ArrayList
can be useful in some programming scenarios. By following the various methods presented in this article, we can easily extract and manipulate the keys
and values
from a HashMap
and convert them to ArrayList to meet our specific programming needs in Java.
6. Download the Source Code
This was an example of Retrieve an ArrayList of Values and Keys from a HashMap.
You can download the full source code of this example here: Retrieve an ArrayList of Values and Keys from a HashMap