Java 8 Streams – Create a map from a collection, list or set
Preamble
With the introduction of streams in Java 8 the writing of Java code has changed. With Java 8 you can now transfer objects from a list to a map in a comfortable way. How to implement this I will show you in this tutorial.
Requirement
- Java knowledge
Convert Collection, List or Set to Map with the Java 8 Streaming API
As a developer you sometimes face the problem that objects of a collection, list or set have to be transferred into a map. There are different reasons for this. One reason might be that the access to the elements of a map is much faster than the access to the elements of a list. In this case it makes sense to transfer the collection, list or set into a map in advance.
In this tutorial we assume that we have a list of the class Customer.java and that it has the properties id, firstname, lastname.
package de.ertantoker.tutorial.model; public class Customer { private String id; private String firstname; private String lastname; public Customer(String id, String firstname, String lastname) { this.id = id; this.firstname = firstname; this.lastname = lastname; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } }
With the Streamin API of Java 8 we can use streams and at the end of the processing we can transfer them via collectors into a target structure suitable for us. In this example we want to convert from a list to a map.
The following code shows how to transfer a List<Customer> to Map<String, Customer>.
package de.ertantoker.tutorial; import de.ertantoker.tutorial.model.Customer; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Java8ListToMap { public static void main(String[] args) { Customer customer1 = new Customer("1", "Albert", "Einstein"); Customer customer2 = new Customer("2", "Otto", "Hahn"); Customer customer3 = new Customer("3", "Isaac", "Newton"); List customerList = Arrays.asList(customer1, customer2, customer3); Map<String, Customer> customerMap = customerList .stream() .collect(Collectors.toMap(Customer::getId, customer -> customer)); } }
The Result
We have now learned how to convert lists or sets into a map with Java 8 and Streams Collection. With the collector classes it is also possible to convert the list into a set or to convert the objects in the list into another class. The Streams API offers a lot of possibilities. How to convert the objects of a list into another class you can see in my next tutorial Java 8 Stream Object mapping.
I hope you enjoyed my little tutorial. If you should have questions, criticism or suggestions, then I would be pleased, if you would leave a comment.