java 16 lines · 5 steps

Building maps from lists with Collectors.toMap

Two stream pipelines turn a list of customers into id-keyed maps, one handling duplicate keys and ordering explicitly.

Explained by highlit
1public Map<Long, CustomerDto> indexByCustomerId(List<CustomerDto> customers) {
2 return customers.stream()
3 .collect(Collectors.toMap(
4 CustomerDto::getId,
5 Function.identity(),
6 (existing, replacement) -> replacement,
7 LinkedHashMap::new));
8}
9 
10public Map<Long, String> emailByCustomerId(List<CustomerDto> customers) {
11 return customers.stream()
12 .filter(c -> c.getEmail() != null)
13 .collect(Collectors.toMap(
14 CustomerDto::getId,
15 CustomerDto::getEmail));
16}
01 / 01
STEP 01

Walkthrough

Space play step click any line
Three takeaways
  1. 1The two-argument `toMap` throws on duplicate keys, so supply a merge function whenever collisions are possible.
  2. 2`Function.identity()` keeps the whole element as the value, letting you index a list by any of its fields.
  3. 3Passing a map supplier like `LinkedHashMap::new` gives you control over iteration order and map type.

Related explainers

Share this explainer

Here's the card — post it anywhere.

Building maps from lists with Collectors.toMap — share card
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code