Lewis D.
—If you have a HashMap
, what is the best way to iterate over all the elements in the Map
?
Java has a couple of solutions we can use to iterate over just the map keys, the values, or each key-value entry. In the approaches below, we will only consider iterating over map entries that will allow you to access both the map keys and map values during the iteration.
Perhaps the most straightforward approach to iterating over a HashMap is to use a for-each loop to iterate over each entry. Using the HashMap.entrySet()
will return a set view of the mappings or entries
in the HashMap.
import java.util.HashMap; import java.util.Map; public class Example { public static void main(String[] args) { Map<String, String> myMap = new HashMap<>() {{ put("a", "b"); put("c", "d"); }}; iterateUsingForEach(myMap); } public static void iterateUsingForEach(Map<String, String> map) { for (Map.Entry<String, String> entry : map.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); System.out.println("Key=" + key + ", Value=" + value); } } }
This next approach uses the same for-each syntax as before, but this time we can make use of an Iterator
. Since the HashMap.entrySet()
method returns a Set
, which extends the Collection
interface, we can use the Iterator
instance returned by Map.entrySet().iterator
.
public void iterateUsingForEachIterator(Map<String, String> map) { Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println("Key=" + key + ", Value=" + value); } }
In this approach, we make use of lambda expressions, which have been available in Java since version 8. A lambda expression operates on input parameters and returns a value. The lambda expression solution to this problem does not need each key-value entry to be converted into an entry set.
public void iterateUsingLambda(Map<String, String> map) { map.forEach((key, value) -> { System.out.println("Key=" + key + ", Value=" + value); }); }
In conclusion, we have looked at three approaches to iterating over a HashMap. Each approach is useful for retrieving both the map keys and the map values. We also looked at using lambdas, which use fewer lines of code to achieve the same iteration as non-lambda approaches.
If you’re looking to get a deeper understanding of how Java application monitoring works, take a look at the following articles:
Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.
SEE EPISODESConsidered “not bad” by 4 million developers and more than 100,000 organizations worldwide, Sentry provides code-level observability to many of the world’s best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.
Here’s a quick look at how Sentry handles your personal information (PII).
×We collect PII about people browsing our website, users of the Sentry service, prospective customers, and people who otherwise interact with us.
What if my PII is included in data sent to Sentry by a Sentry customer (e.g., someone using Sentry to monitor their app)? In this case you have to contact the Sentry customer (e.g., the maker of the app). We do not control the data that is sent to us through the Sentry service for the purposes of application monitoring.
Am I included?We may disclose your PII to the following type of recipients:
You may have the following rights related to your PII:
If you have any questions or concerns about your privacy at Sentry, please email us at compliance@sentry.io.
If you are a California resident, see our Supplemental notice.